W Oracle LENGTH()
funkcja zwraca długość swojego argumentu.
LENGTH()
można również traktować jako grupę funkcji. Istnieje pięć oddzielnych funkcji; LENGTH()
, LENGTHB()
, LENGTH()
, LENGTH2()
i LENGTH4()
. Każda funkcja oblicza długość w inny sposób.
Składnia
Składnia wygląda tak:
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)
Funkcje obliczają długości w następujący sposób:
Funkcja | Oblicza długość za pomocą… |
---|---|
LENGTH() | Znaki zdefiniowane przez zestaw znaków wejściowych, przy czym pierwszy znak ciągu ma pozycję 1. |
LENGTHB() | Bajtów |
LENGTH() | Kompletne znaki Unicode |
LENGTH2() | Punkty kodowe UCS2 |
LENGTH4() | Punkty kodowe UCS4 |
Typ argumentu może być następujący:
- Gdy używasz
LENGTH()
iLENGTHB()
składnia, argument może być dowolnym typem danychCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
lubNCLOB
. - Gdy używasz
LENGTHC()
,LENGTH2()
iLENGTH4()
składnia, argument może być dowolnym typem danychCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(ale nieCLOB
lubNCLOB
).
Przykład
Oto podstawowy przykład:
SELECT LENGTH('Big fat cat')
FROM DUAL;
Wynik:
11
W porównaniu z LENGTHB()
Ten przykład pokazuje, w jaki sposób wyniki mogą się różnić w zależności od używanej konkretnej funkcji i zestawu znaków.
W tym przypadku porównujemy LENGTH()
z LENGTHB()
:
SELECT
LENGTH('Böyük yağlı pişik') AS LENGTH,
LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;
Wynik:
LENGTH LENGTHB _________ __________ 17 22
Widzimy, że te dwie funkcje zwróciły dwa różne wyniki. Dzieje się tak, ponieważ niektóre znaki w tym ciągu używają dwóch bajtów.
LENGTH()
funkcja zwraca długość w znakach określoną przez zestaw znaków wejściowych, podczas gdy LENGTHB()
funkcja zwraca długość w bajtach .
Jeśli wrócimy do oryginalnego ciągu, wyniki obu funkcji są takie same:
SELECT
LENGTH('Big fat cat') AS LENGTH,
LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;
Wynik:
LENGTH LENGTHB _________ __________ 11 11
Ten ciąg używa tylko jednego bajtu na znak, więc długość w bajtach jest taka sama jak liczba znaków.
Argument zerowy
Jeśli argumentem jest null
, wynik to 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;
Wynik:
LENGTH LENGTHB LENGTHC LENGTH2 LENGTH4 _________ __________ __________ __________ __________ null null null null null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie funkcji bez przekazywania jakichkolwiek argumentów skutkuje błędem:
SELECT LENGTH()
FROM DUAL;
Wynik:
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:
Przekazywanie zbyt wielu argumentów również skutkuje błędem:
SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;
Wynik:
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: