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,CLOBlubNCLOB. - Gdy używasz
LENGTHC(),LENGTH2()iLENGTH4()składnia, argument może być dowolnym typem danychCHAR,VARCHAR2,NCHAR,NVARCHAR2(ale nieCLOBlubNCLOB).
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: