praktische Beispiel für Postgres regex substring oder regexp_matches
Ich habe versucht die folgende Abbildung für ein paar Tage. Bitte HELFEN Sie
PostgreSQL-Tabelle : Standorte
Id State
--------------------
1 New York
2 Texas
input = 'Grüße aus Texas an alle Cowboys'
Ausgabe: Zeile mit Texas
SELECT id, state FROM locations WHERE state ~* substring(input from state)
InformationsquelleAutor Joey | 2010-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
1.
2.
Den beiden oben genannten Methoden haben beide einige Probleme in einigen Fällen.Aber ich will wissen, ob Sie für Sie sind.
3.
Die Letzte Methode wäre noch besser.
Wenn Sie wollen, dass diese schnell für große Tabellen, dann müssen Sie spezielle Indizierung und anderer Magie. Siehe postgresql.org/docs/8.4/static/textsearch.html, wie zu tun ist schnell, indizierte Volltext-Suche.
Ich habe herausgefunden, warum ich ein problem hatte. Bestimmte Zeilen der colunm Staat hat einige Klammern. wählen Sie Status von Orten, wo Staatliche like '%(%' return colunms mit Zeilen Wie kann entkommen () in den Zustand
InformationsquelleAutor tinychen
Einen Suchbegriff ein ist nicht ein Muster. Versuchen Sie dies:
oder so:
wenn Sie möchten, Posix regexp.
Beispiel:
Dieser braucht einige Raffinesse oder natürlich, wenn Sie brauchen, um zu erkennen Wortgrenzen:
Wenn du regex-Metazeichen (Finden Sie in der PostgreSQL-Dokumentation als Liste) in Ihrer Suche nach Worten, dann müssen Sie möglicherweise zitieren Sie diese zuerst. Diese sehen ein bisschen komisch, aber das ist, was die Flucht sieht immer aus wie:
Den
([\(\)\*])
ist die Liste der Zeichen, die Sie wollen, zu entkommen.Jedoch, wenn Sie nie müssen reguläre Ausdrücke in Ihre Suchbegriffe ein, dann könnte es einfacher sein, um eine einfache string Suche-Funktion wie strpos():
Können Sie
upper()
wenn Sie möchten, dass groß-und Kleinschreibung vergleichtIch habe auch versucht die Posix-bekomme aber die folgende Fehlermeldung ERROR: invalid regular expression: die Klammern () nicht ausgeglichen SQL-Status: 2201B
Ich habe ein transcript, was ich eingetippt, um zu überprüfen, dass ich ' m nicht sagen, Sie bullsh*t ist. Überprüfen Sie Ihre syntax.
Ich habe herausgefunden, warum ich ein problem hatte. Bestimmte Zeilen der colunm Staat hat einige Klammern, New York (Ort). Wie kann ich propely escape () in den Zustand
das problem mit dem strpos Ansatz ist, dass es nicht möglich zu codieren Wortgrenzen das bedeutet, dass Standorte wie 'Als' zurückgegeben. Der Ansatz mit regexp_replace funktioniert, aber scheint wirklich so ineffizient in full sql: select * from Orte where 'fakulos greekos metexas' ~* ('\\m' || regexp_replace(Zustand, E'([()*])', E'\\\\\\1','g') || '\\M');
InformationsquelleAutor Nordic Mainframe
Ich würde werfen Sie einen Blick auf Volltext-Suche:
Standard ab version 8.3, die in älteren Versionen müssen Sie zum installieren von tsearch2 aus den contrib.
http://www.postgresql.org/docs/current/interactive/textsearch.html
InformationsquelleAutor Frank Heikens