В MariaDB, LENGTH()
е вградена функция низ, която връща дължината на дадения низ аргумент.
Когато е в режим по подразбиране, дължината на низа се измерва в байтове. Но когато е в режим на Oracle, се измерва в знаци.
Синтаксис
Синтаксисът е така:
LENGTH(str)
Където str
е низът, за който ще бъде върната дължината.
Пример
Ето един основен пример:
SELECT LENGTH('café');
Резултат:
+-----------------+ | LENGTH('café') | +-----------------+ | 5 | +-----------------+
В този случай низът е дълъг четири знака, но LENGTH()
върна 5
.
Това е така, защото последният знак използва два байта и аз използвам SQL режима по подразбиране (моят sql_mode=DEFAULT
). Когато е в SQL режим по подразбиране, LENGTH()
връща броя на байтовете.
Режим Oracle
Превключването към режим на Oracle води до LENGTH()
връща само броя на знаците в низа (за разлика от броя на байтовете).
Нека превключим нашата сесия в режим на Oracle:
SET SESSION sql_mode='ORACLE';
И сега нека изпълним предишния LENGTH()
отново пример:
SELECT LENGTH('café');
Резултат:
+-----------------+ | LENGTH('café') | +-----------------+ | 4 | +-----------------+
Този път връща броя на знаците (4) вместо броя на байтовете (5).
Когато сте в режим на Oracle, LENGTH()
връща същия резултат като CHAR_LENGTH()
и неговия синоним, CHARACTER_LENGTH()
.
Сравнение с CHAR_LENGTH()
и BIT_LENGTH()
Нека се върнем към режима по подразбиране:
SET SESSION sql_mode=DEFAULT;
Ето едно бързо сравнение между LENGTH()
когато е в режим по подразбиране, CHAR_LENGTH()
и BIT_LENGTH()
който връща броя на битовете в низ:
SELECT
LENGTH('อ'),
CHAR_LENGTH('อ'),
BIT_LENGTH('อ');
Резултат:
+---------------+--------------------+-------------------+ | LENGTH('อ') | CHAR_LENGTH('อ') | BIT_LENGTH('อ') | +---------------+--------------------+-------------------+ | 3 | 1 | 24 | +---------------+--------------------+-------------------+
Този тайландски знак (อ
) използва 3 байта и следователно LENGTH()
връща 3
.
CHAR_LENGTH()
връща 1
, защото все още е само един знак и BIT_LENGTH()
връща броя на битовете (24
).
Отново, ако бяхме в режим на Oracle, LENGTH()
би върнал същото като CHAR_LENGTH()
.
Не-низови
Ако аргументът не е низ, той се преобразува в низ.
Ето още един пример, който използва число:
SELECT LENGTH(1234);
Резултат:
+--------------+ | LENGTH(1234) | +--------------+ | 4 | +--------------+
Нулеви аргументи
Предаването на null
връща null
:
SELECT LENGTH(null);
Резултат:
+--------------+ | LENGTH(null) | +--------------+ | NULL | +--------------+
Липсващ аргумент
Извикване на LENGTH()
без подаване на аргумент води до грешка:
SELECT LENGTH();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LENGTH'