Ve většině případů se zřetězení řetězce a čísla v SQL neliší od zřetězení dvou řetězců.
Většina DBMS zřetězí řetězec a číslo, jako by to byly oba řetězce. Důvodem je, že číslo je obvykle převedeno na řetězec před operací zřetězení.
Většina hlavních RDBMS poskytuje CONCAT()
funkce pro operace zřetězení a také CONCAT_WS()
funkce, která vám umožňuje určit oddělovač, pro který se mají oddělit zřetězené argumenty.
Většina hlavních RDBMS také obsahuje operátor zřetězení řetězců, který nám umožňuje zřetězení jeho operandů.
CONCAT()
Funkce
Většina hlavních RDBMS poskytuje CONCAT()
funkce pro zřetězení jeho argumentů řetězce. Obecně platí, že neřetězcové argumenty jsou převedeny na řetězec dříve, než dojde ke zřetězení.
Příklad:
SELECT CONCAT('Player', 456);
Výsledek:
Player456
Pokud chceme mezi zřetězené argumenty vložit mezeru, můžeme buď přidat mezeru k jednomu z řetězců, nebo zahrnout mezeru jako samostatný argument:
SELECT
CONCAT('Player ', 456) AS "Option 1",
CONCAT('Player', ' ', 456) AS "Option 2";
Výsledek:
+------------+------------+ | Option 1 | Option 2 | +------------+------------+ | Player 456 | Player 456 | +------------+------------+
RDBMS, které mají CONCAT()
funkce zahrnují MySQL, MariaDB, SQL Server, Oracle a PostgreSQL.
SQLite nemá CONCAT()
funkce. SQLite dělá mají operátor zřetězení řetězců (viz níže).
CONCAT_WS()
Funkce
Dalším způsobem, jak vložit mezeru, je použít CONCAT_WS()
funkce. Tato funkce vám umožňuje určit oddělovač, který bude použit k oddělení všech zřetězených argumentů.
Příklad:
SELECT CONCAT_WS(' ', 'Player', 456);
Výsledek:
Player 456
Tato funkce může být zvláště užitečná, pokud máte mnoho argumentů ke zřetězení:
SELECT CONCAT_WS(', ', 'Red', 2, 'Green', 456, 'Black');
Výsledek:
Red, 2, Green, 456, Black
V takových případech stačí zadat oddělovač pouze jednou. V tomto příkladu jsem jako oddělovač zadal čárku a mezeru.
RDBMS, které mají CONCAT_WS()
funkce zahrnují MySQL, MariaDB, SQL Server a PostgreSQL.
SQLite a Oracle nemají CONCAT_WS()
funkce, ale dělají mají operátor zřetězení řetězců (viz níže).
Operátor zřetězení řetězců
Většina RDBMS obsahuje operátor zřetězení řetězců, který zřetězí jeho operandy.
Pokud používáte SQLite, je to vaše jediná možnost.
Příklad:
SELECT 'Player' || 456;
Výsledek:
Player456
Všimněte si, že v MySQL budete muset nejprve povolit operátor zřetězení potrubí.
Totéž platí pro MariaDB.
SQL Server
Výše uvedený příklad nebude fungovat v SQL Server. V SQL Server použijte znaménko plus (+
) operátor zřetězení řetězců.
Před pokusem o zřetězení bude také nutné převést číslo na řetězec:
SELECT 'Player' + CAST(456 AS varchar(3));
Výsledek:
Player456
Pokud se o to pokusím, aniž bych nejprve převedl číslo na řetězec, stane se toto:
SELECT 'Player' + 456;
Výsledek:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Player' to data type int.
SQL Server si myslí, že se pokoušíme přidat dvě čísla (protože +
je také operátor sčítání) a proto vrací chybu, protože jeden z operandů je řetězec.