В MariaDB, CONCAT()
е вградена низова функция, която извършва конкатенация на низове на своите аргументи. Връща низа, който е резултат от конкатенирането на неговите аргументи.
Конкатенацията е операцията за свързване на два или повече низове от край до край.
CONCAT()
приема един или повече аргументи, всички от които се връщат като единичен конкатениран низ.
Синтаксис
Синтаксисът е така:
CONCAT( str1, str2, ... )
Където str1, str2, …
представляват низовите аргументи, за които да се конкатенира.
Пример
Ето един основен пример:
SELECT CONCAT('Homer', 'Jay');
Резултат:
+-----------------------+| CONCAT('Homer', 'Jay') |+------------------------+| HomerJay |+-----------------------+
В този случай свързахме два низа.
Ето го отново, но този път добавяме интервал между тях:
SELECT CONCAT('Homer', ' ', 'Jay');
Резултат:
+----------------------------+| CONCAT('Homer', ' ', 'Jay') |+----------------------------+| Хоумър Джей |+-----------------------------+
В този случай свързахме три низа.
Ето го с пет:
SELECT CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson');
Резултат:
+----------------------------------------------------+ | CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson') |+---------------------------- -----------------+| Хоумър Джей Симпсън |+----------------------------------------------------- +
Двоични низове
Ако някой от аргументите е двоичен низ, резултатът е двоичен низ:
SELECT CONCAT(BINARY 'Homer', 'Jay');
Резултат:
+-------------------------------+| CONCAT(BINARY 'Homer', 'Jay') |+------------------------------+| HomerJay |+------------------------------+
Можем да използваме COLLATION()
функция за проверка на съпоставянето на резултата:
SELECT COLLATION(CONCAT(BINARY 'Homer', 'Jay'));
Резултат:
+------------------------------------+| COLLATION(CONCAT(ДВОИЧНО 'Homer', 'Jay')) |+------------------------------------------------ --------+| двоичен |+------------------------------------+
Ако премахнем BINARY
оператор, получаваме различен резултат:
SELECT COLLATION(CONCAT('Homer', 'Jay'));
Резултат:
+---------------------------------+| COLLATION(CONCAT('Homer', 'Jay')) |+---------------------------------- +| utf8_general_ci |+----------------------------------+
Също така, според документацията на MariaDB, числовите аргументи се преобразуват в тяхната еквивалентна форма на двоичен низ. Можете да избегнете това, като направите изрично прехвърляне на типа (използвайки CAST()
или CONVERT()
).
Нулеви аргументи
Ако някой от аргументите е null
, CONCAT()
връща null
.
Има обаче едно изключение:Когато сте в режим на Oracle (т.е. sql_mode=ORACLE
), произволен null
аргументите просто се игнорират.
Първо, нека видим как CONCAT()
се държи в режим по подразбиране.
Задайте нашата сесия на режим по подразбиране:
SET SESSION sql_mode=DEFAULT;
Сега стартирайте CONCAT()
с null
аргумент:
SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Резултат:
+----------------------------------------------+| CONCAT('Homer', ' ', null, ' ', 'Simpson') |+------------------------------ --------------+| NULL |+-----------------------------------------------------+предварително>Както се очаква, резултатът е
null
.Сега нека превключим нашата сесия в режим на Oracle:
SET SESSION sql_mode=ORACLE;
И сега нека изпълним предишния
CONCAT()
отново пример:SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Резултат:
+----------------------------------------------+| CONCAT('Homer', ' ', null, ' ', 'Simpson') |+------------------------------ --------------+| Хоумър Симпсън |+----------------------------------------------+предварително>Този път игнорира
null
аргумент и конкатенира всички останали не-null
аргументи. Ако се вгледате внимателно, ще видите, че свързва двете интервали, така че има двойно интервал междуHomer
иSimpson
.За
null
-безопасна алтернатива, използвайтеCONCAT_WS()
. Тази функция игнорираnull
стойности, дори когато не е в режим на Oracle.Като алтернатива можете да използвате
IFNULL()
за предоставяне на алтернативна (низова) стойност заnull
стойности (като празен низ).Единичен аргумент
Извикване на
CONCAT()
само с един аргумент просто връща този аргумент:SELECT CONCAT('Homer');
Резултат:
+-----------------+| CONCAT('Homer') |+----------------+| Омир |+-----------------+Липсващ аргумент
Извикване на
CONCAT()
без подаване на аргументи води до грешка:SELECT CONCAT();
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „CONCAT“