Regex-Operator in SQLite

Bilal Shahid 21 Juni 2023
  1. Was ist Regex
  2. So installieren Sie Regex in SQLite
  3. Verwenden Sie Regex in einer Abfrage in SQLite
  4. Verwenden Sie Regex von der Befehlszeile in SQLite
  5. Alternativen zu Regex in SQLite
Regex-Operator in SQLite

Die Verwendung von Funktionen macht SQLite viel einfacher und die Datenverarbeitung ist tendenziell viel schneller. Eine Erweiterung dazu ist der regex-Operator, der häufig verwendet wird, um eine bessere Benutzererfahrung zu bieten, indem er Abfragen verkürzt und es den Benutzern ermöglicht, Daten schneller zu verarbeiten.

Was ist Regex

Regex ist die Klausel, die verwendet wird, wenn ein Benutzer auf einen regulären Ausdruck verweisen möchte. Sein Hauptzweck besteht darin, eine benutzerdefinierte Funktion aufzurufen, die dann in die Datenbank geladen wird und einige zusätzliche Aufgaben ausführt, die möglicherweise nach der Regex-Klausel hinzugefügt wurden.

Die Funktion kann jede Aktivität ausführen, die der Benutzer benötigt. Es ist jedoch wichtig zu beachten, dass die Funktion definiert und geladen werden muss, bevor regex verwendet wird.

Geschieht dies nicht vorher, führt die Verwendung der regex-Klausel zu einer Fehlermeldung. Dies liegt daran, dass es keine Funktion gibt, mit der es standardmäßig verknüpft ist.

Um es effektiv zu nutzen, müssen Sie daher Ihre Funktion in der Anwendung erstellen und dann den Callback-Link zum SQLite-Treiber bereitstellen.

So installieren Sie Regex in SQLite

In den meisten Fällen ist regex in SQLite im Paket enthalten. Es ist in einigen SQLite-Distributionen oder GUI-Tools verfügbar, jedoch nicht in allen Fällen.

Es besteht also eine hohe Wahrscheinlichkeit, dass Sie es möglicherweise installieren müssen. Hier ist eine Schritt-für-Schritt-Anleitung, wie Sie dies tun können.

  1. Schreiben Sie den folgenden Code in Ihr Terminal.

    sudo apt-get install sqlite3-pcre
    
  2. Jetzt wurden reguläre Perl-Ausdrücke in einer ladbaren Datei installiert. Sie finden es unter /usr/lib/sqlite3/pcre.so.

  3. Um es zu verwenden, müssen Sie es folgendermaßen laden:

    .load /usr/lib/sqlite3/pcre.so
    

Jetzt können Sie ganz einfach die regex-Klausel in SQLite verwenden. Es ist wichtig zu beachten, dass Sie die Datei jedes Mal laden müssen, um sie richtig zu verwenden.

Eine Möglichkeit, dies zu umgehen, besteht darin, die Zeile in Ihre ~/.sqliterc einzufügen. Auf diese Weise wird die Zeile jedes Mal automatisch ausgeführt, wenn Sie SQLite öffnen.

Verwenden Sie Regex in einer Abfrage in SQLite

Nun, da Sie wissen, dass Sie zuerst eine Funktion erstellen müssen, um regex in SQLite zu verwenden, lassen Sie uns eine einfache Funktion erstellen. Es ist wichtig zu beachten, dass der Name der Funktion 'regexp' sein muss. Dies hilft der regex-Funktion, die zu verwendende Funktion zu identifizieren.

Sie können die Funktion jederzeit ändern, indem Sie ihren Inhalt ändern oder sie überschreiben und eine neue Funktion erstellen. Hier ist ein Beispiel:

sqlite_create_function ( 'regexp', 0, sub {return time} );

Diese Funktion gibt die aktuelle Uhrzeit zurück. Um dies zu einer Tabelle hinzuzufügen, können Sie es mit einer einfachen Codezeile einfügen.

INSERT INTO table_name (regexp());

Nachdem Ihre Funktion erstellt wurde, können Sie die Abfrage regex verwenden. Denken Sie daran, es richtig zu verwenden; am Ende muss ein 'P' angefügt werden.

Ihr Ausdruck enthält also so etwas wie WHERE x REGEXP <regex>.

Lassen Sie uns den Operator mit der oben erstellten Funktion verwenden. Verwenden Sie den folgenden Code, um ihn korrekt auszuführen.

SELECT * from table_name
WHERE column_name REGEXP '\bA\w+'

In diesem Code können Sie den gesamten Inhalt in der Tabelle sehen, in der die Wörter mit dem Buchstaben 'A' beginnen.

Hier ist ein weiteres Beispiel, das die Werte beginnend mit 'A' anzeigen würde, aber dieses Mal wird zwischen Groß- und Kleinschreibung unterschieden.

SELECT * from table_name
WHERE column_name REGEXP '(?i:\bA\w+)'

Hinweis: Die Syntax zum Erstellen der Funktion kann sich je nach verwendeter Sprache ändern.

Verwenden Sie Regex von der Befehlszeile in SQLite

Wenn Sie in einer Befehlszeile arbeiten, müssen Sie möglicherweise eine Datei laden, um den Befehl regex auszuführen, abhängig vom Inhalt Ihrer ~/.sqliterc. Stattdessen können Sie regex immer direkt von Ihrer Kommandozeile aus verwenden, solange Sie zuvor bereits eine Funktion erstellt haben.

Die Syntax bleibt gleich, aber Sie müssen die Bibliothek laden, bevor Sie den Code mit dem Schalter -cmd schreiben. Hier ist ein Beispiel, das mit SQLite 3 funktioniert.

sqlite3 "$file_name" -cmd
".load /usr/lib/sqlite3/pcre.so"
"SELECT fld FROM table_name
WHERE fld REGEXP '\b3\b';"

Auf diese Weise können Sie direkt von der Befehlszeile auf Ihrem System Abfragen durchführen, ohne eine andere SQLite-Anwendung öffnen zu müssen.

Alternativen zu Regex in SQLite

Nehmen wir ein anderes Beispiel und nehmen an, dass Sie eine Abfrage erstellen möchten, die alle Werte in der Tabelle liefert, die die Zahl drei enthalten. Wenn Sie dies mit dem Operator regex tun würden, könnten Sie dies wie folgt tun:

SELECT * FROM table_name
WHERE x REGEXP '(^|,)(3)(,|$)'

Hier ist eine andere Methode:

SELECT fld FROM table_name
WHERE fld REGEXP '\b3\b';

In beiden Fällen gehen wir davon aus, dass vor der Ausführung bereits eine entsprechende Funktion erstellt wurde.

Angenommen, wir müssten dies anders machen, ohne REGEX zu verwenden. In diesem Fall könnten wir immer eine relativ komplizierte Abfrage wie die untenstehende verwenden.

SELECT * FROM table_name
WHERE ',' || x || ',' LIKE '%,3,%'

Obwohl beide Methoden gut funktionieren, wird oft empfohlen, sich für den Operator regex zu entscheiden, wenn Sie mit Abfragen arbeiten, die mehr Logik erfordern.

Dies liegt daran, dass Sie am Ende möglicherweise eine sehr lange und komplizierte Abfrage erhalten, die viel Speicher beansprucht und möglicherweise nicht einmal das Problem in allen Fällen löst. Der Operator regex entfernt die Mehrdeutigkeit und reduziert den dieser Abfrage zugewiesenen Speicher.

Das war alles, was Sie über den Operator regex wissen müssen. Wir hoffen, dass sich die von uns bereitgestellten Informationen als nützlich erwiesen haben, damit Sie den Operator problemlos verwenden können.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub