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

PostgreSQL inversé comme

Votre cas simple peut être résolu avec une simple requête en utilisant le ANY construire et ~* :

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

~* est l'opérateur de correspondance d'expression régulière insensible à la casse. Je l'utilise au lieu de ILIKE afin que nous puissions utiliser des mots originaux dans votre chaîne sans avoir besoin de remplir % pour ILIKE . Le résultat est le même - sauf pour les mots contenant des caractères spéciaux :%_\ pour ILIKE et !$()*+.:<=>?[\]^{|}- pour les modèles d'expressions régulières. Vous devrez peut-être échapper des caractères spéciaux de toute façon pour éviter les surprises. Voici une fonction pour les expressions régulières :

  • Fonction d'échappement pour les expressions régulières ou les modèles LIKE

Mais j'ai des doutes tenaces qui seront tout ce dont vous avez besoin. Voir mon commentaire. Je soupçonne que vous avez besoin d'une recherche en texte intégral avec un dictionnaire correspondant à votre langue naturelle pour fournir des radicaux de mots utiles ...

Connexe :

  • Opérateur IN vs ANY dans PostgreSQL
  • Variations des performances des requêtes PostgreSQL LIKE
  • Mise en correspondance de modèles avec LIKE, SIMILAR TO ou des expressions régulières dans PostgreSQL