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

LENGTH()-Funktion in Oracle

In Oracle die LENGTH() Funktion gibt die Länge ihres Arguments zurück.

LENGTH() kann auch als eine Gruppe von Funktionen betrachtet werden. Es gibt fünf separate Funktionen; LENGTH() , LENGTHB() , LENGTHC() , LENGTH2() , und LENGTH4() . Jede Funktion berechnet die Länge anders.

Syntax

Die Syntax lautet wie folgt:

{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)

Die Funktionen berechnen Längen wie folgt:

Funktion Berechnet die Länge mit …
LENGTH() Zeichen wie durch den Eingabezeichensatz definiert, wobei das erste Zeichen der Zeichenfolge die Position 1 hat.
LENGTHB() Bytes
LENGTHC() Vollständige Unicode-Zeichen
LENGTH2() UCS2-Codepunkte
LENGTH4() UCS4-Codepunkte

Der Argumenttyp kann wie folgt sein:

  • Bei Verwendung von LENGTH() und LENGTHB() Syntax kann das Argument jeder der Datentypen CHAR sein , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB , oder NCLOB .
  • Bei Verwendung von LENGTHC() , LENGTH2() und LENGTH4() Syntax kann das Argument jeder der Datentypen CHAR sein , VARCHAR2 , NCHAR , NVARCHAR2 (aber nicht CLOB oder NCLOB ).

Beispiel

Hier ist ein einfaches Beispiel:

SELECT LENGTH('Big fat cat')
FROM DUAL;

Ergebnis:

11

Verglichen mit LENGTHB()

Dieses Beispiel zeigt, wie sich die Ergebnisse je nach verwendeter spezifischer Funktion und verwendetem Zeichensatz unterscheiden können.

In diesem Fall vergleichen wir LENGTH() mit LENGTHB() :

SELECT 
    LENGTH('Böyük yağlı pişik') AS LENGTH,
    LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;

Ergebnis:

   LENGTH    LENGTHB 
_________ __________ 
       17         22

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.

Die LENGTH() Die Funktion gibt die Länge in Zeichen zurück, wie sie durch den Eingabezeichensatz definiert ist, während die LENGTHB() 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 
    LENGTH('Big fat cat') AS LENGTH,
    LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;

Ergebnis:

   LENGTH    LENGTHB 
_________ __________ 
       11         11 

Diese Zeichenfolge verwendet nur ein Byte pro Zeichen, und daher ist die Länge in Bytes gleich der Anzahl der Zeichen.

Null-Argument

Wenn das Argument null ist , ist das Ergebnis null :

SET NULL 'null';
SELECT 
    LENGTH(null) AS LENGTH,
    LENGTHB(null) AS LENGTHB,
    LENGTHC(null) AS LENGTHC,
    LENGTH2(null) AS LENGTH2,
    LENGTH4(null) AS LENGTH4
FROM DUAL;

Ergebnis:

   LENGTH    LENGTHB    LENGTHC    LENGTH2    LENGTH4 
_________ __________ __________ __________ __________ 
     null       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

Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT LENGTH()
FROM DUAL;

Ergebnis:

Error starting at line : 1 in command -
SELECT LENGTH()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

Und das Übergeben zu vieler Argumente führt ebenfalls zu einem Fehler:

SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;

Ergebnis:

Error starting at line : 1 in command -
SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action: