V Oracle LENGTH()
funkce vrací délku svého argumentu.
LENGTH()
lze také chápat jako skupinu funkcí. Existuje pět samostatných funkcí; LENGTH()
, LENGTHB()
, LENGTHC()
, LENGTH2()
a LENGTH4()
. Každá funkce počítá délku jiným způsobem.
Syntaxe
Syntaxe vypadá takto:
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)
Funkce vypočítají délky následovně:
Funkce | Vypočítá délku pomocí… |
---|---|
LENGTH() | Znaky definované vstupní znakovou sadou, přičemž první znak řetězce má pozici 1. |
LENGTHB() | Bajty |
LENGTHC() | Úplné znaky Unicode |
LENGTH2() | body kódu UCS2 |
LENGTH4() | body kódu UCS4 |
Typ argumentu může být následující:
- Při použití
LENGTH()
aLENGTHB()
syntaxe, argument může být libovolný z datových typůCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
neboNCLOB
. - Při použití
LENGTHC()
,LENGTH2()
aLENGTH4()
syntaxe, argument může být libovolný z datových typůCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(ale neCLOB
neboNCLOB
).
Příklad
Zde je základní příklad:
SELECT LENGTH('Big fat cat')
FROM DUAL;
Výsledek:
11
Ve srovnání s LENGTHB()
Tento příklad ukazuje, jak se mohou výsledky lišit v závislosti na konkrétní funkci, kterou používáte, a na použité znakové sadě.
V tomto případě porovnáme LENGTH()
s LENGTHB()
:
SELECT
LENGTH('Böyük yağlı pişik') AS LENGTH,
LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;
Výsledek:
DÉLKA DÉLKA B _________ __________ 17 22
Vidíme, že tyto dvě funkce vrátily dva různé výsledky. Důvodem je, že některé znaky v tomto řetězci používají dva bajty.
LENGTH()
funkce vrací délku ve znacích, jak je definována vstupní znakovou sadou, zatímco LENGTHB()
funkce vrací délku v bajtech .
Pokud se vrátíme k původnímu řetězci, výsledky jsou mezi oběma funkcemi stejné:
SELECT
LENGTH('Big fat cat') AS LENGTH,
LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;
Výsledek:
DÉLKA DÉLKA B _________ __________ 11 11
Tento řetězec používá pouze jeden bajt na znak, takže délka v bajtech je stejná jako počet znaků.
Nulový argument
Pokud je argument null
, výsledkem je 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;
Výsledek:
LENGTH LENGTHB LENGTHC LENGTH2 LENGTH4 _________ __________ __________ __________ __________ null null null null null nullVe výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když
null
dochází v důsledku SQLSELECT
prohlášení.Můžete však použít
SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězecnull
by měl být vrácen.Nesprávný počet argumentů
Volání funkce bez předání jakýchkoli argumentů má za následek chybu:
SELECT LENGTH() FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT LENGTH()FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce:A předání příliš mnoha argumentů také vede k chybě:
SELECT LENGTH('Big fat cat', 'oops') FROM DUAL;
Výsledek:
Chyba začínající na řádku:1 v příkazu -SELECT LENGTH('Velká tlustá kočka', 'jejda')FROM DUALEchyba na příkazovém řádku:1 Sloupec:8Hlášení o chybě -Chyba SQL:ORA-00909:neplatný počet argumentů00909. 00000 - "neplatný počet argumentů"*Příčina:*Akce: