PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL Reverse LIKE

Ihr einfacher Fall kann mit einer einfachen Abfrage unter Verwendung des ANY gelöst werden konstruieren und ~* :

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

~* ist der Übereinstimmungsoperator für reguläre Ausdrücke, bei dem die Groß-/Kleinschreibung nicht berücksichtigt wird. Ich verwende das anstelle von ILIKE sodass wir Originalwörter in Ihrer Zeichenfolge verwenden können, ohne % auffüllen zu müssen für ILIKE . Das Ergebnis ist dasselbe - außer bei Wörtern, die Sonderzeichen enthalten:%_\ für ILIKE und !$()*+.:<=>?[\]^{|}- für reguläre Ausdrucksmuster. Möglicherweise müssen Sie Sonderzeichen so oder so maskieren, um Überraschungen zu vermeiden. Hier ist eine Funktion für reguläre Ausdrücke:

  • Escape-Funktion für reguläre Ausdrücke oder LIKE-Muster

Aber ich habe nagende Zweifel, dass das alles sein wird, was du brauchst. Siehe meinen Kommentar. Ich vermute, Sie benötigen eine Volltextsuche mit einem passenden Wörterbuch für Ihre natürliche Sprache, um eine nützliche Wortstammerkennung bereitzustellen ...

Verwandte:

  • IN vs. ANY-Operator in PostgreSQL
  • Änderungen der PostgreSQL LIKE-Abfrageleistung
  • Mustervergleich mit LIKE, SIMILAR TO oder regulären Ausdrücken in PostgreSQL