I de fleste tilfælde er sammenkædning af en streng og et tal i SQL ikke anderledes end sammenkædning af to strenge.
De fleste DBMS'er vil sammenkæde strengen og nummeret, som om de begge var strenge. Dette skyldes, at tallet normalt konverteres til en streng før sammenkædningsoperationen.
De fleste større RDBMS'er giver en CONCAT()
funktion til sammenkædningsoperationer, samt en CONCAT_WS()
funktion, der giver dig mulighed for at angive en separator, som de sammenkædede argumenter skal adskilles for.
De fleste større RDBMS'er inkluderer også en strengsammenkædningsoperator, som giver os mulighed for at sammenkæde dens operander.
CONCAT()
Funktion
De fleste større RDBMS'er giver en CONCAT()
funktion til at sammenkæde dens strengargumenter. Generelt konverteres ikke-streng-argumenter til en streng, før sammenkædningen finder sted.
Eksempel:
SELECT CONCAT('Player', 456);
Resultat:
Player456
Hvis vi vil inkludere et mellemrum mellem de sammenkædede argumenter, kan vi enten tilføje et mellemrum til en af strengene eller inkludere et mellemrum som et separat argument:
SELECT
CONCAT('Player ', 456) AS "Option 1",
CONCAT('Player', ' ', 456) AS "Option 2";
Resultat:
+------------+------------+ | Option 1 | Option 2 | +------------+------------+ | Player 456 | Player 456 | +------------+------------+
RDBMS'er, der har en CONCAT()
funktioner omfatter MySQL, MariaDB, SQL Server, Oracle og PostgreSQL.
SQLite har ikke en CONCAT()
fungere. SQLite gør har en strengsammenkædningsoperator (se nedenfor).
CONCAT_WS()
Funktion
En anden måde at inkludere et mellemrum på er at bruge CONCAT_WS()
fungere. Denne funktion giver dig mulighed for at angive en separator, der skal bruges til at adskille alle sammenkædede argumenter.
Eksempel:
SELECT CONCAT_WS(' ', 'Player', 456);
Resultat:
Player 456
Denne funktion kan være særlig nyttig, hvis du har mange argumenter til at sammenkæde:
SELECT CONCAT_WS(', ', 'Red', 2, 'Green', 456, 'Black');
Resultat:
Red, 2, Green, 456, Black
I sådanne tilfælde behøver du kun at angive separatoren én gang. I dette eksempel har jeg angivet et komma og et mellemrum som skilletegn.
RDBMS'er, der har en CONCAT_WS()
funktioner omfatter MySQL, MariaDB, SQL Server og PostgreSQL.
SQLite og Oracle har ikke en CONCAT_WS()
funktion, men de gør har en strengsammenkædningsoperator (se nedenfor).
Stringsammenkædningsoperatøren
De fleste RDBMS'er inkluderer en strengsammenkædningsoperator, der sammenkæder dens operander.
Hvis du bruger SQLite, er dette din eneste mulighed.
Eksempel:
SELECT 'Player' || 456;
Resultat:
Player456
Bemærk, at i MySQL skal du først aktivere rørsammenkædningsoperatøren.
Det samme gælder for MariaDB.
SQL-server
Ovenstående eksempel virker ikke i SQL Server. I SQL Server skal du bruge plustegnet (+
) strengsammenkædningsoperator.
Nummeret skal også konverteres til en streng, før du forsøger at sammenkæde:
SELECT 'Player' + CAST(456 AS varchar(3));
Resultat:
Player456
Her er, hvad der sker, hvis jeg prøver at gøre det uden først at konvertere tallet til en streng:
SELECT 'Player' + 456;
Resultat:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Player' to data type int.
SQL Server mener, at vi forsøger at tilføje to tal (fordi +
er også additionsoperatoren) og returnerer derfor en fejl, fordi en af operanderne er en streng.