Funktionsgruppe: Zeichenkettenfunktion
SUBSTRING() extrahiert eine Teilzeichenkette aus einer Zeichenkette.
SUBSTRING (
ausdruck FROM
startposition [FOR
teilkettenlänge ][USING CODE_UNITS])
ausdruck
Alphanumerischer Ausdruck oder National-Ausdruck. Seine Auswertung ergibt entweder eine alphanumerische Zeichenkette (Datentyp CHAR oder VARCHAR) oder eine National-Zeichenkette (Datentyp NCHAR oder NVARCHAR). Siehe auch Abschnitt „Verträglichkeit von Datentypen".
startposition
Numerischer Ausdruck, dessen Datentyp DECIMAL oder NUMERIC ohne Nachkommastellen (SCALE 0), SMALLINT oder INTEGER ist. Die Auswertung von startposition ergibt eine Ganzzahl oder eine Festpunktzahl ohne Nachkommastellen. Es darf kein multipler Wert mit Dimension > 1 sein.
startposition gibt die Position eines Zeichens inner- oder außerhalb derjenigen Zeichenkette an, die sich bei der Auswertung von ausdruck ergibt. startposition bestimmt das Zeichen, ab dem die Teilzeichenkette extrahiert werden soll.
teilkettenlänge
Numerischer Ausdruck, dessen Datentyp DECIMAL oder NUMERIC ohne Nachkommastellen (SCALE 0), SMALLINT oder INTEGER ist. Die Auswertung von teilkettenlänge ergibt eine Ganzzahl oder eine Festpunktzahl ohne Nachkommastellen ergibt. Der Wert von teilkettenlänge darf nicht < 0 sein. Es darf kein multipler Wert mit Dimension > 1 sein.
teilkettenlänge gibt die maximale Länge der Teilzeichenkette an.
Ergebnis
Bei der folgenden Darstellung der möglichen Ergebnisse bezeichnet zeichenkette die Zeichenkette, die sich bei der Auswertung von ausdruck ergibt.
Das Ergebnis ist der NULL-Wert, wenn ausdruck, startposition und/oder teilkettenlänge den NULL-Wert annimmt.
Das Ergebnis ist eine Zeichenkette der Länge 0, wenn eine der folgenden Voraussetzungenn gegeben ist:
startposition ist größer als die Anzahl der Zeichen in zeichenkette
zeichenkette hat die Länge 0
teilkettenlänge ist 0
Die Summe aus startposition und teilkettenlänge ergibt einen Wert <= 1
Sonst:
Das Ergebnis ist eine Teilzeichenkette von zeichenkette. Die Reihenfolge der Zeichen entspricht der Reihenfolge der Zeichen in zeichenkette. Die Teilzeichenkette enthält so viele Zeichen, wie durch startposition und teilkettenlänge vorgegeben ist:
teilkettenlänge ist angegeben und startposition >=1:
Die Teilzeichenkette enthält teilkettenlänge Zeichen, höchstens jedoch bis zum letzten Zeichen von zeichenkette, beginnend bei dem Zeichen von zeichenkette, das durch startposition vorgegeben ist.
teilkettenlänge ist angegeben und startposition < 1:
Die Teilzeichenkette enthält (startposition + teilkettenlänge-1) Zeichen, höchstens jedoch bis zum letzten Zeichen von zeichenkette, beginnend beim ersten Zeichen von zeichenkette.
teilkettenlänge ist nicht angegeben und startposition >= 1:
Die Teilzeichenkette enthält ab startposition alle Zeichen der Zeichenkette bis zum letzten Zeichen.
teilkettenlänge ist nicht angegeben und startposition < 1:
Die gesamte Zeichenkette wird extrahiert.
Datentyp:
Wenn ausdruck den alphanumerischen Datentyp CHAR(n) oder VARCHAR(n) hat, dann hat das Ergebnis den alphanumerischen Datentyp VARCHAR(n).
Wenn ausdruck den National-Datentyp NCHAR(n) oder NVARCHAR(n) hat, dann hat das Ergebnis den National-Datentyp NVARCHAR(n).
Beispiele
Aus der Zeichenkette 'Pudelshop Anke' soll eine Teilkette extrahiert werden. 'Pudelshop Anke' ist der Firmenname eines Kunden in der Tabelle KUNDE.
startposition ist > 1, teilkettenlänge ist angegeben:
SELECT SUBSTRING (firma FROM 6 FOR 4) FROM kunde WHERE knr=105
Das Ergebnis ist die Zeichenkette „shop“.
startposition ist gleich 0, teilkettenlänge ist angegeben:
SELECT SUBSTRING (firma FROM 0 FOR 5) FROM kunde WHERE knr=105
Das Ergebnis ist die Zeichenkette „Pude“ der Länge (0+5-1) = 4.
startposition ist <0 und (startposition + teilkettenlänge -1) ist größer als die Länge von zeichenkette:
SELECT SUBSTRING (firma FROM -2 FOR 20) FROM kunde WHERE knr=105
Das Ergebnis ist die Zeichenkette „Pudelshop Anke“.
startposition ist > 1, teilkettenlänge ist nicht angegeben:
SELECT SUBSTRING (firma FROM 6) FROM kunde WHERE knr=105
Das Ergebnis ist die Zeichenkette „shop Anke“.
startposition ist größer als die Anzahl der Zeichen in zeichenkette:
SELECT SUBSTRING (firma FROM 15 FOR 5) FROM kunde WHERE knr=105
Das Ergebnis ist eine Zeichenkette der Länge 0.