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()
ogLENGTHB()
syntaks, kan argumentet være enhver af datatyperneCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
ellerNCLOB
. - Når du bruger
LENGTHC()
,LENGTH2()
ogLENGTH4()
syntaks, kan argumentet være enhver af datatyperneCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(men ikkeCLOB
ellerNCLOB
).
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: