PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL reverso LIKE


Seu caso simples pode ser resolvido com uma simples consulta usando o ANY construir e ~* :
SELECT *
FROM   tbl
WHERE  col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));

~* é o operador de correspondência de expressão regular que não diferencia maiúsculas de minúsculas. Eu uso isso em vez de ILIKE para que possamos usar palavras originais em sua string sem a necessidade de preencher % para ILIKE . O resultado é o mesmo - exceto para palavras que contêm caracteres especiais:%_\ para ILIKE e !$()*+.:<=>?[\]^{|}- para padrões de expressão regular. Você pode precisar escapar caracteres especiais de qualquer maneira para evitar surpresas. Aqui está uma função para expressões regulares:
  • Função Escape para expressão regular ou padrões LIKE

Mas tenho dúvidas incômodas de que será tudo o que você precisa. Veja meu comentário. Suspeito que você precise da Pesquisa de Texto Completo com um dicionário correspondente para sua linguagem natural para fornecer um radical de palavras útil ...

Relacionado:
  • IN vs operador ANY no PostgreSQL
  • Variações de desempenho de consulta PostgreSQL LIKE
  • Correspondência de padrões com LIKE, SIMILAR TO ou expressões regulares no PostgreSQL