Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SUBSTR()-Funktion in Oracle

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: