Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden von LIKE in einer Oracle IN-Klausel

Nützlich wäre hier ein LIKE ANY Prädikat, wie es in PostgreSQL verfügbar ist

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

Leider ist diese Syntax in Oracle nicht verfügbar. Sie können das quantifizierte Vergleichsprädikat mit OR erweitern , jedoch:

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

Oder erstellen Sie alternativ einen Semi-Join mit einem EXISTS Prädikat und eine zusätzliche Array-Datenstruktur (siehe diese Frage für 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
)

Für eine echte Volltextsuche sollten Sie sich Oracle Text ansehen:http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html