В Oracle, LENGTH()
функцията връща дължината на своя аргумент.
LENGTH()
може да се разглежда и като група от функции. Има пет отделни функции; LENGTH()
, LENGTHB()
, LENGTHC()
, LENGTH2()
и LENGTH4()
. Всяка функция изчислява дължината по различен начин.
Синтаксис
Синтаксисът е така:
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)
Функциите изчисляват дължините, както следва:
Функция | Изчислява дължината с помощта на… |
---|---|
LENGTH() | Символи, както са дефинирани от входния набор от знаци, като първият знак от низ има позиция 1. |
LENGTHB() | Байтове |
LENGTHC() | Пълни символи в Unicode |
LENGTH2() | Кодови точки UCS2 |
LENGTH4() | Кодови точки UCS4 |
Типът на аргумента може да бъде както следва:
- Когато използвате
LENGTH()
иLENGTHB()
синтаксис, аргументът може да бъде всеки от типовете данниCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
илиNCLOB
. - Когато използвате
LENGTHC()
,LENGTH2()
иLENGTH4()
синтаксис, аргументът може да бъде всеки от типовете данниCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(но неCLOB
илиNCLOB
).
Пример
Ето един основен пример:
SELECT LENGTH('Big fat cat')
FROM DUAL;
Резултат:
11
В сравнение с LENGTHB()
Този пример показва как резултатите могат да се различават в зависимост от това коя конкретна функция използвате и от набора от символи.
В този случай сравняваме LENGTH()
с LENGTHB()
:
SELECT
LENGTH('Böyük yağlı pişik') AS LENGTH,
LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;
Резултат:
LENGTH LENGTHB _________ __________ 17 22
Можем да видим, че двете функции са върнали два различни резултата. Това е така, защото някои знаци в този низ използват два байта.
LENGTH()
функцията връща дължината в знаци, както е дефинирана от входния набор от знаци, докато LENGTHB()
функцията връща дължината в байтове .
Ако се върнем към оригиналния низ, резултатите са еднакви между двете функции:
SELECT
LENGTH('Big fat cat') AS LENGTH,
LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;
Резултат:
LENGTH LENGTHB _________ __________ 11 11
Този низ използва само един байт на знак и така дължината в байтове е същата като броя на знаците.
Нулев аргумент
Ако аргументът е null
, резултатът е 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;
Резултат:
LENGTH LENGTHB LENGTHC LENGTH2 LENGTH4 _________ __________ __________ __________ __________ null null null null null
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Неправилен брой аргументи
Извикването на функцията без предаване на аргументи води до грешка:
SELECT LENGTH()
FROM DUAL;
Резултат:
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:
И предаването на твърде много аргументи също води до грешка:
SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;
Резултат:
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: