Problem:
Sie haben eine Spalte mit Zeichenfolgen und möchten Teilzeichenfolgen daraus erhalten.
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, SUBSTR(email, 1, 7) AS substring FROM emails;
Das Ergebnis ist:
Teilstring | |
---|---|
[email protected] | jake99@ |
[email protected] | Tamarab |
[email protected] | notine@ |
[email protected] | Jessica |
Diskussion:
Verwenden Sie ein SUBSTR()
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.
>SUBSTR(email, 1, 7) gibt die Teilstrings der Werte in der E-Mail-Spalte zurück, die beim ersten Zeichen beginnen und sieben Zeichen lang sind.
Beispiel 2:
Sie möchten den Teilstring zwischen den Indizes 2 und 6 (einschließlich) anzeigen.
Lösung 2:
SELECT email, SUBSTR(email, 2, 5) AS substring FROM emails;
Das Ergebnis ist:
Teilstring | |
---|---|
[email protected] | ake99 |
[email protected] | Amara |
[email protected] | meine |
[email protected] | wesentlich |
Diskussion:
Sie verwenden den SUBSTR()
funktionieren wie im vorigen Beispiel. Diesmal ist das zweite Argument der Funktion 2, da wir bei Index 2 beginnen wollen. Die Länge des Teilstrings ist 5 (end_index - start_index + 1
).
Beispiel 3:
Sie möchten den Teilstring anzeigen, der mit dem @-Zeichen beginnt und am Ende des Strings endet, kennen aber die genauen Indizes oder Längen nicht.
Lösung 3:
SELECT email, SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) 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 SUBSTR()
funktionieren genauso 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 den INSTR(column, character)
verwenden -Funktion, wobei Spalte die Literalzeichenfolge oder die Spalte ist, aus der Sie die Teilzeichenfolge abrufen möchten, und Zeichen das character
ist an der Sie den Teilstring beginnen möchten (hier @
).
Das dritte Argument von SUBSTR()
Funktion ist die Länge der Teilzeichenfolge. Sie können es mit INSTR()
berechnen und die LENGTH()
Funktionen. Dazu subtrahieren Sie den Index von der Spaltenlänge und addieren dann 1:
LENGTH(email) - INSTR(email, '@') + 1
Möglicherweise möchten Sie auch einen Teilstring abrufen, der nicht am Ende des Strings endet, sondern an einem bestimmten Zeichen, z. B. vor „.“ So können Sie dies tun:
SELECT email, SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(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 INSTR(email, '.') - INSTR(email, '@')
berechnet einfach die Länge des Teilstrings.