sql >> Database teknologi >  >> RDS >> Oracle

LENGTH() Funktion i Oracle

I Oracle er LENGTH() funktion returnerer længden af ​​sit argument.

LENGTH() kan også opfattes som en gruppe af funktioner. Der er fem separate funktioner; LENGTH() , LENGTHB() , LENGTHC() , LENGTH2() , og LENGTH4() . Hver funktion beregner længden på en anden måde.

Syntaks

Syntaksen ser sådan ud:

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

Funktionerne beregner længder som følger:

Funktion Beregner længde ved hjælp af...
LENGTH() Tegn som defineret af inputtegnsættet, hvor det første tegn i strengen har position 1.
LENGTHB() Bytes
LENGTHC() Complete Unicode-tegn
LENGTH2() UCS2-kodepunkter
LENGTH4() UCS4-kodepunkter

Argumenttypen kan være som følger:

  • Når du bruger LENGTH() og LENGTHB() syntaks, kan argumentet være enhver af datatyperne CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB eller NCLOB .
  • Når du bruger LENGTHC() , LENGTH2() og LENGTH4() syntaks, kan argumentet være enhver af datatyperne CHAR , VARCHAR2 , NCHAR , NVARCHAR2 (men ikke CLOB eller NCLOB ).

Eksempel

Her er et grundlæggende eksempel:

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

Resultat:

11

Sammenlignet med LENGTHB()

Dette eksempel viser, hvordan resultaterne kan variere, afhængigt af hvilken specifik funktion du bruger, og det involverede tegnsæt.

I dette tilfælde sammenligner vi LENGTH() med LENGTHB() :

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

Resultat:

   LENGTH    LENGTHB 
_________ __________ 
       17         22

Vi kan se, at de to funktioner gav to forskellige resultater. Dette skyldes, at nogle tegn i denne streng bruger to bytes.

LENGTH() funktion returnerer længden i tegn som defineret af inputtegnsættet, hvorimod LENGTHB() funktion returnerer længden i bytes .

Hvis vi vender tilbage til den oprindelige streng, er resultaterne de samme mellem de to funktioner:

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

Resultat:

   LENGTH    LENGTHB 
_________ __________ 
       11         11 

Denne streng bruger kun én byte pr. tegn, så længden i bytes er den samme som antallet af tegn.

Nul-argument

Hvis argumentet er null , resultatet er 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;

Resultat:

   LENGTH    LENGTHB    LENGTHC    LENGTH2    LENGTH4 
_________ __________ __________ __________ __________ 
     null       null       null       null       null 

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Forkert antal argumenter

Kaldning af funktionen uden at sende nogen argumenter resulterer i en fejl:

SELECT LENGTH()
FROM DUAL;

Resultat:

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:

Og at sende for mange argumenter resulterer også i en fejl:

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

Resultat:

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:

  1. Kompleks Postgres-forespørgsel

  2. Hvordan SQLite Ifnull() virker

  3. markør:pin S vent på X

  4. Hvordan kan jeg undslippe kantede parenteser i en LIKE-klausul?