Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So extrahieren Sie einen Teilstring aus einem String in PostgreSQL/MySQL

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:

E-Mail
[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:

E-Mail 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:

E-Mail 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:

E-Mail 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.