sql >> Base de Datos >  >> RDS >> Oracle

Uso de LIKE en una cláusula IN de Oracle

Lo que sería útil aquí sería un LIKE ANY predicado como está disponible en PostgreSQL

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

Desafortunadamente, esa sintaxis no está disponible en Oracle. Puede expandir el predicado de comparación cuantificado usando OR , sin embargo:

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

O alternativamente, cree una unión semi usando un EXISTS predicado y una estructura de datos de matriz auxiliar (ver esta pregunta para más detalles):

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
)

Para una verdadera búsqueda de texto completo, puede consultar Oracle Text:http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html