Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utilisation de LIKE dans une clause Oracle IN

Ce qui serait utile ici serait un LIKE ANY prédicat tel qu'il est disponible dans PostgreSQL

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

Malheureusement, cette syntaxe n'est pas disponible dans Oracle. Vous pouvez développer le prédicat de comparaison quantifié en utilisant OR , cependant :

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

Ou bien, créez une semi-jointure en utilisant un EXISTS prédicat et une structure de données de tableau auxiliaire (voir cette question pour plus de détails):

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
)

Pour une véritable recherche en texte intégral, vous pouvez consulter Oracle Text :http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html