Oracle
 sql >> Database >  >> RDS >> Oracle

Utilizzo di LIKE in una clausola Oracle IN

Ciò che sarebbe utile qui sarebbe un LIKE ANY predicato come è disponibile in PostgreSQL

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

Sfortunatamente, quella sintassi non è disponibile in Oracle. Puoi espandere il predicato di confronto quantificato utilizzando OR , tuttavia:

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

O in alternativa, crea un semi join usando un EXISTS predicato e una struttura dati array ausiliaria (vedi questa domanda per i dettagli):

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
)

Per una vera ricerca full-text, potresti voler guardare Oracle Text:http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html