sql >> Database >  >> RDS >> Oracle

LIKE gebruiken in een Oracle IN-clausule

Wat hier handig zou zijn, is een LIKE ANY predikaat zoals beschikbaar in PostgreSQL

SELECT * 
FROM tbl
WHERE my_col LIKE ANY (ARRAY['%val1%', '%val2%', '%val3%', ...])

Helaas is die syntaxis niet beschikbaar in Oracle. U kunt het gekwantificeerde vergelijkingspredikaat uitbreiden met OR , echter:

SELECT * 
FROM tbl
WHERE my_col LIKE '%val1%' OR my_col LIKE '%val2%' OR my_col LIKE '%val3%', ...

Of maak een semi-join aan met een EXISTS predikaat en een hulparray datastructuur (zie deze vraag voor details):

SELECT *
FROM tbl t
WHERE EXISTS (
  SELECT 1
  -- Alternatively, store those values in a temp table:
  FROM TABLE (sys.ora_mining_varchar2_nt('%val1%', '%val2%', '%val3%'/*, ...*/))
  WHERE t.my_col LIKE column_value
)

Voor echt zoeken in volledige tekst kunt u Oracle Text bekijken:http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html



  1. Kerstmis komt vroeg (Oracle 12.2)

  2. MySQL - forceer om cache niet te gebruiken voor het testen van de snelheid van de query

  3. Hoe MySQL-verbindingen (max_connections) vergroten?

  4. Een gids voor het begrijpen van schaalpatronen voor databases