Ich versuche, Datensätze in einer Postgresql-Datenbank auszuwählen, in der der Benutzername nicht wie eine Liste von Zeichenfolgen ist.
SELECT * FROM rails_db WHERE username NOT LIKE 'j%' AND username NOT LIKE '%eepy%';
Das Problem ist, dass es viele dieser Werte gibt. Gibt es eine Möglichkeit, ein Array davon zu erstellen und etwas zu sagen wie:
SELECT * FROM rails_db WHERE username NOT LIKE ARRAY[my values];
postgresql
optimization
Jeff
quelle
quelle
Ich habe es vielleicht gefunden, aber ich möchte sehen, ob dies so funktioniert, wie es soll:
quelle
'j.*|...|\.'
Ihre Idee, einen regulären Ausdruck mit Zweigen zu verwenden, ist solide. Aber in Ihrer Antwort haben Sie die Übersetzung des Sonderzeichens
%
inLIKE
Muster falsch verstanden.Diese:
wird übersetzt in:
!~
unterscheidet zwischen Groß- und KleinschreibungNOT LIKE
.Verwenden Sie
!~*
diese Option , um Groß- und Kleinschreibung zu berücksichtigenNOT ILIKE
.So schließen Sie auch Zeichenfolgen aus, die irgendwo einen Punkt (
.
) enthalten , und ein anderes Beispiel, das mit dem Ende der Zeichenfolge übereinstimmt (nicht übereinstimmt), wie folgtusername NOT LIKE '%end'
:Wahrscheinlich auch nicht sehr schnell.
quelle
quelle