В повечето случаи конкатенирането на низ и число в SQL не се различава от обединяването на два низа.
Повечето СУБД ще конкатенират низа и номера, сякаш и двата са низове. Това е така, защото числото обикновено се преобразува в низ преди операцията на конкатенация.
Повечето основни RDBMS предоставят CONCAT()
функция за операции на конкатенация, както и CONCAT_WS()
функция, която ви позволява да зададете разделител, за който да разделите свързаните аргументи.
Повечето основни RDBMS също включват оператор за конкатенация на низове, който ни позволява да конкатенираме неговите операнди.
CONCAT()
Функция
Повечето основни RDBMS предоставят CONCAT()
функция за конкатенация на нейните низови аргументи. Обикновено аргументите, които не са низови, се преобразуват в низ, преди да настъпи конкатенацията.
Пример:
SELECT CONCAT('Player', 456);
Резултат:
Player456
Ако искаме да включим интервал между конкатенираните аргументи, можем или да добавим интервал към един от низовете, или да включим интервал като отделен аргумент:
SELECT
CONCAT('Player ', 456) AS "Option 1",
CONCAT('Player', ' ', 456) AS "Option 2";
Резултат:
+------------+------------+ | Option 1 | Option 2 | +------------+------------+ | Player 456 | Player 456 | +------------+------------+
RDBMS, които имат CONCAT()
функция включва MySQL, MariaDB, SQL Server, Oracle и PostgreSQL.
SQLite няма CONCAT()
функция. SQLite прави имат оператор за конкатенация на низове (вижте по-долу).
CONCAT_WS()
Функция
Друг начин да включите интервал е да използвате CONCAT_WS()
функция. Тази функция ви позволява да посочите разделител, който ще се използва за разделяне на всички свързани аргументи.
Пример:
SELECT CONCAT_WS(' ', 'Player', 456);
Резултат:
Player 456
Тази функция може да бъде особено полезна, ако имате много аргументи за конкатенация:
SELECT CONCAT_WS(', ', 'Red', 2, 'Green', 456, 'Black');
Резултат:
Red, 2, Green, 456, Black
В такива случаи трябва само веднъж да посочите разделителя. В този пример посочих запетая и интервал като разделител.
RDBMS, които имат CONCAT_WS()
функция включва MySQL, MariaDB, SQL Server и PostgreSQL.
SQLite и Oracle нямат CONCAT_WS()
функция, но те правят имат оператор за конкатенация на низове (вижте по-долу).
Операторът за конкатенация на низове
Повечето RDBMS включват оператор за конкатенация на низове, който конкатенира неговите операнди.
Ако използвате SQLite, това е единствената ви опция.
Пример:
SELECT 'Player' || 456;
Резултат:
Player456
Имайте предвид, че в MySQL ще трябва първо да активирате оператора за конкатенация на тръби.
Същото важи и за MariaDB.
SQL сървър
Горният пример няма да работи в SQL Server. В SQL Server използвайте знака плюс (+
) оператор за конкатенация на низове.
Освен това числото също ще трябва да бъде преобразувано в низ, преди да се опитате да се конкатенира:
SELECT 'Player' + CAST(456 AS varchar(3));
Резултат:
Player456
Ето какво се случва, ако се опитам да го направя, без първо да преобразувам числото в низ:
SELECT 'Player' + 456;
Резултат:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Player' to data type int.
SQL Server смята, че се опитваме да добавим две числа (защото +
е също оператор за събиране) и следователно връща грешка, поради това, че един от операндите е низ.