Problem:
So extrahieren Sie einen Teilstring aus einem String in PostgreSQL/MySQL
Beispiel 1:
In den emails
Tabelle gibt es eine E-Mail-Spalte. Sie möchten die ersten sieben Zeichen jeder E-Mail anzeigen.
Die Tabelle sieht folgendermaßen aus:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Lösung 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Eine andere Syntax:
SELECT email, SUBSTRING(email FROM 1 FOR 7) AS substring FROM emails;
Das Ergebnis ist:
Teilstring | |
---|---|
[email protected] | jake99@ |
[email protected] | Tamarab |
[email protected] | notine@ |
[email protected] | Jessica |
Diskussion:
Verwenden Sie den SUBSTRING()
Funktion. Das erste Argument ist die Zeichenfolge oder der Spaltenname. Das zweite Argument ist der Index des Zeichens, bei dem der Teilstring beginnen soll. Das dritte Argument ist die Länge des Teilstrings.
Achtung! Anders als in einigen anderen Programmiersprachen beginnen die Indizes bei 1 , nicht 0. Das bedeutet, dass das erste Zeichen den Index 1 hat, das zweite Zeichen den Index 2 usw.
SUBSTRING(email, 1, 7)
gibt die Teilstrings der Werte in der E-Mail-Spalte zurück, die am Anfang der Strings (erstes Zeichen) beginnen und sieben Zeichen lang sind. Die andere Notation, SUBSTRING(email FROM 1 FOR 7)
, macht genau das gleiche. Das Argument nach FROM
ist der Startindex und das Argument nach dem FOR
ist die Länge des Teilstrings.
Das dritte Argument von SUBSTRING()
Funktion ist optional. Wenn Sie es weglassen, erhalten Sie den Teilstring, der am Index im zweiten Argument beginnt und bis zum Ende des Strings reicht. SUBSTRING(email, 1)
gibt den gesamten String zurück, genauso wie SUBSTRING(email FROM 1)
.
Beispiel 2:
Sie möchten den Teilstring zwischen den Indizes 2 und 6 (einschließlich) anzeigen.
Lösung 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Eine andere Syntax:
SELECT email, SUBSTRING(email FROM POSITION('@' IN email)) AS substring FROM emails;
Das Ergebnis ist:
Teilstring | |
---|---|
[email protected] | @googlemail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @onet.pl |
Diskussion:
Sie verwenden den SUBSTRING()
funktionieren wie in den vorherigen Beispielen. Dieses Mal suchen Sie nach einem bestimmten Zeichen, dessen Position von Zeile zu Zeile variieren kann. Um den Index des bestimmten Zeichens zu finden, können Sie die POSITION(character IN column)
verwenden Funktion, wobei Zeichen das spezifische Zeichen ist, an dem Sie die Teilzeichenfolge beginnen möchten (hier @
) . Die Argumentspalte ist die column
aus dem Sie den Teilstring abrufen möchten; es kann auch ein Literal-String sein.
Wenn Sie möchten, dass der Teilstring bis zum Ende des ursprünglichen Strings reicht, das dritte Argument in SUBSTRING()
Funktion (oder die FOR
Argument) wird nicht benötigt. Andernfalls sollte es die Länge des Teilstrings sein, oder Sie können sie mit POSITION()
berechnen Funktion. Möglicherweise möchten Sie auch einen Teilstring abrufen, der nicht am Ende des Strings endet, sondern an einem bestimmten Zeichen, z. B. vor „.“ Hier ist ein Beispiel:
SELECT email, SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring FROM emails;
Eine andere Syntax:
SELECT email, SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring FROM emails;
Das Ergebnis dieser Abfrage ist:
Teilstring | |
---|---|
[email protected] | @googlemail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Der Teil POSITION('.' IN email) - POSITION('@' IN email)
berechnet einfach die Länge des Teilstrings.