In Oracle der SUBSTR()
Funktion gibt einen Teilstring aus einem gegebenen String zurück.
SUBSTR()
erfordert mindestens zwei Argumente; die Zeichenfolge und die Position, aus der die Teilzeichenfolge extrahiert werden soll. Es akzeptiert auch ein optionales drittes Argument, mit dem Sie angeben können, wie lang der Teilstring sein soll.
SUBSTR()
kann auch als eine Gruppe von Funktionen betrachtet werden. Es gibt fünf separate Funktionen; SUBSTR()
, SUBSTRB()
, SUBSTRC()
, SUBSTR2()
, und SUBSTR4()
. Jede Funktion berechnet die Länge anders.
Syntax
Die Syntax lautet wie folgt:
{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])
Wobei char
ist die Zeichenfolge, position
ist die Startposition der Teilzeichenfolge und substring_length
ist die Länge der zu extrahierenden Zeichen.
Die Funktionen berechnen Längen wie folgt:
Funktion | Berechnet die Länge mit … |
---|---|
SUBSTR() | Zeichen wie durch den Eingabezeichensatz definiert |
SUBSTRB() | Bytes |
SUBSTRC() | Vollständige Unicode-Zeichen |
SUBSTR2() | UCS2-Codepunkte |
SUBSTR4() | UCS4-Codepunkte |
Beispiel
Hier ist ein einfaches Beispiel:
SELECT SUBSTR('Big fat cat', 5)
FROM DUAL;
Ergebnis:
fat cat
Verglichen mit SUBSTRB()
Dieses Beispiel zeigt, wie sich die Ergebnisse je nach verwendeter spezifischer Funktion und verwendetem Zeichensatz unterscheiden können.
In diesem Fall vergleichen wir SUBSTR()
mit SUBSTRB()
:
SELECT
SUBSTR('Böyük yağlı pişik', 5) AS SUBSTR,
SUBSTRB('Böyük yağlı pişik', 5) AS SUBSTRB
FROM DUAL;
Ergebnis:
SUBSTR SUBSTRB ________________ _________________ k yağlı pişik ük yağlı pişik
Wir können sehen, dass die beiden Funktionen zwei unterschiedliche Ergebnisse zurückgegeben haben. Dies liegt daran, dass einige Zeichen in dieser Zeichenfolge zwei Bytes verwenden.
Der SUBSTR()
Die Funktion gibt die Länge in cZeichen zurück, wie durch den Eingabezeichensatz definiert, während SUBSTRB()
Funktion gibt die Länge in Bytes zurück .
Wenn wir zum ursprünglichen String zurückkehren, sind die Ergebnisse zwischen den beiden Funktionen gleich:
SELECT
SUBSTR('Big fat cat', 5) AS SUBSTR,
SUBSTRB('Big fat cat', 5) AS SUBSTRB
FROM DUAL;
Ergebnis:
SUBSTR SUBSTRB __________ __________ fat cat fat cat
Das liegt daran, dass diese Zeichenfolge nur ein Byte pro Zeichen verwendet, und daher ist die Länge in Bytes gleich der Anzahl der Zeichen.
Teilstringlänge
Hier ist ein Beispiel, das die Länge der zu extrahierenden Teilzeichenfolge angibt:
SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;
Ergebnis:
fat
Und hier ist ein Vergleich zwischen SUBSTR()
und SUBSTRB()
bei Angabe der Länge bei Multibyte-Zeichen:
SELECT
SUBSTR('Böyük yağlı pişik', 5, 9) AS SUBSTR,
SUBSTRB('Böyük yağlı pişik', 5, 9) AS SUBSTRB
FROM DUAL;
Ergebnis:
SUBSTR SUBSTRB ____________ __________ k yağlı p ük yağl
Nullposition
Eine Besonderheit dieser Funktion ist, dass die Position 0
übergeben wird erzeugt dasselbe Ergebnis wie das Übergeben von 1
:
SELECT
SUBSTR('Big fat cat', 0, 3) AS "0",
SUBSTR('Big fat cat', 1, 3) AS "1"
FROM DUAL;
Ergebnis:
0 1 ______ ______ Big Big
Negative Position
Die Angabe eines negativen Wertes für die Position bewirkt, dass die Startposition vom Ende des Strings rückwärts gezählt wird:
SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;
Ergebnis:
cat
Und jede angegebene Länge wird von dieser Position an gezählt:
SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;
Ergebnis:
fat
Null-Argumente
Wenn eines (oder alle) Argumente null
sind , ist das Ergebnis null
:
SET NULL 'null';
SELECT
SUBSTR(null, 3, 3) AS r1,
SUBSTR('Coffee', null, 3) AS r2,
SUBSTR('Coffee', 3, null) AS r3,
SUBSTR(null, null, null) AS r4
FROM DUAL;
Ergebnis:
R1 R2 R3 R4 _______ _______ _______ _______ null null null null
Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null
tritt als Ergebnis eines SQL SELECT
auf Erklärung.
Sie können jedoch SET NULL
verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null
zurückgegeben werden soll.
Falsche Argumentanzahl
Aufruf von SUBSTR()
ohne Übergabe von Argumenten ergibt sich ein Fehler:
SELECT SUBSTR()
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT SUBSTR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Und die Übergabe zu vieler Argumente führt ebenfalls zu einem Fehler:
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT SUBSTR('Big fat cat', 3, 2, 1) FROM DUAL Error at Command Line : 1 Column : 36 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: