sql >> Base de Datos >  >> RDS >> PostgreSQL

LIKE inverso de PostgreSQL

Su caso simple se puede resolver con una consulta simple usando ANY construir y ~* :

SELECT *
FROM   tbl
WHERE  col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));

~* es el operador de coincidencia de expresiones regulares que no distingue entre mayúsculas y minúsculas. Lo uso en lugar de ILIKE para que podamos usar palabras originales en su cadena sin la necesidad de rellenar % para ILIKE . El resultado es el mismo, excepto por las palabras que contienen caracteres especiales:%_\ para ILIKE y !$()*+.:<=>?[\]^{|}- para patrones de expresiones regulares. Es posible que deba escapar de los caracteres especiales de cualquier manera para evitar sorpresas. Aquí hay una función para expresiones regulares:

  • Función de escape para expresiones regulares o patrones LIKE

Pero tengo dudas persistentes de que será todo lo que necesitas. Ver mi comentario. Sospecho que necesita la búsqueda de texto completo con un diccionario coincidente para su idioma natural para proporcionar palabras útiles...

Relacionado:

  • IN vs CUALQUIER operador en PostgreSQL
  • Variaciones de rendimiento de consultas LIKE de PostgreSQL
  • Coincidencia de patrones con LIKE, SIMILAR TO o expresiones regulares en PostgreSQL