Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Usando LIKE em uma cláusula Oracle IN


O que seria útil aqui seria um LIKE ANY predicado como está disponível no PostgreSQL
SELECT * 
FROM tbl
WHERE my_col LIKE ANY (ARRAY['%val1%', '%val2%', '%val3%', ...])

Infelizmente, essa sintaxe não está disponível no Oracle. Você pode expandir o predicado de comparação quantificada usando OR , Contudo:
SELECT * 
FROM tbl
WHERE my_col LIKE '%val1%' OR my_col LIKE '%val2%' OR my_col LIKE '%val3%', ...

Ou, alternativamente, crie uma semi-junção usando um EXISTS predicado e uma estrutura de dados de matriz auxiliar (consulte esta pergunta para obter detalhes):
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 uma verdadeira pesquisa de texto completo, você pode consultar o Oracle Text:http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html