In Oracle is de LENGTH()
functie geeft de lengte van zijn argument terug.
LENGTH()
kan ook worden gezien als een groep functies. Er zijn vijf afzonderlijke functies; LENGTH()
, LENGTHB()
, LENGTH()
, LENGTH2()
, en LENGTH4()
. Elke functie berekent de lengte op een andere manier.
Syntaxis
De syntaxis gaat als volgt:
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)
De functies berekenen de lengtes als volgt:
Functie | Berekent lengte met… |
---|---|
LENGTH() | Tekens zoals gedefinieerd door de invoertekenset, waarbij het eerste teken van de tekenreeks positie 1 heeft. |
LENGTHB() | Bytes |
LENGTHC() | Unicode volledige tekens |
LENGTH2() | UCS2-codepunten |
LENGTH4() | UCS4-codepunten |
Het argumenttype kan als volgt zijn:
- Bij gebruik van de
LENGTH()
enLENGTHB()
syntaxis, het argument kan elk van de gegevenstypen zijnCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
, ofNCLOB
. - Bij gebruik van de
LENGTHC()
,LENGTH2()
enLENGTH4()
syntaxis, het argument kan elk van de gegevenstypen zijnCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(maar nietCLOB
ofNCLOB
).
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT LENGTH('Big fat cat')
FROM DUAL;
Resultaat:
11
Vergeleken met LENGTHB()
Dit voorbeeld laat zien hoe de resultaten kunnen verschillen, afhankelijk van de specifieke functie die u gebruikt en de betrokken tekenset.
In dit geval vergelijken we LENGTH()
met LENGTHB()
:
SELECT
LENGTH('Böyük yağlı pişik') AS LENGTH,
LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;
Resultaat:
LENGTH LENGTHB _________ __________ 17 22
We kunnen zien dat de twee functies twee verschillende resultaten hebben opgeleverd. Dit komt omdat sommige tekens in deze tekenreeks twee bytes gebruiken.
De LENGTH()
functie retourneert de lengte in tekens zoals gedefinieerd door de invoertekenset, terwijl de LENGTHB()
functie retourneert de lengte in bytes .
Als we terugkeren naar de originele string, zijn de resultaten hetzelfde tussen de twee functies:
SELECT
LENGTH('Big fat cat') AS LENGTH,
LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;
Resultaat:
LENGTH LENGTHB _________ __________ 11 11
Deze string gebruikt slechts één byte per teken, en dus is de lengte in bytes gelijk aan het aantal tekens.
Nullargument
Als het argument null
is , het resultaat is 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;
Resultaat:
LENGTH LENGTHB LENGTHC LENGTH2 LENGTH4 _________ __________ __________ __________ __________ null null null null null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Onjuist aantal argumenten
Het aanroepen van de functie zonder het doorgeven van argumenten resulteert in een fout:
SELECT LENGTH()
FROM DUAL;
Resultaat:
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:
En het doorgeven van te veel argumenten resulteert ook in een fout:
SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;
Resultaat:
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: