I de flesta fall är det inte annorlunda att sammanfoga en sträng och ett nummer i SQL från att sammanfoga två strängar.
De flesta DBMS kommer att sammanfoga strängen och numret som om de båda vore strängar. Detta beror på att numret vanligtvis konverteras till en sträng före sammanlänkningsoperationen.
De flesta större RDBMS tillhandahåller en CONCAT()
funktion för sammanlänkningsoperationer, såväl som en CONCAT_WS()
funktion som låter dig ange en separator för vilken de sammanlänkade argumenten ska separeras.
De flesta större RDBMS inkluderar också en strängsammansättningsoperator, som gör att vi kan sammanfoga dess operander.
CONCAT()
Funktion
De flesta större RDBMS tillhandahåller en CONCAT()
funktion för att sammanfoga dess strängargument. I allmänhet konverteras icke-strängargument till en sträng innan sammanlänkningen sker.
Exempel:
SELECT CONCAT('Player', 456);
Resultat:
Player456
Om vi vill inkludera ett mellanslag mellan de sammanlänkade argumenten kan vi antingen lägga till ett mellanslag till en av strängarna eller inkludera ett mellanslag som ett 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 som har en CONCAT()
funktioner inkluderar MySQL, MariaDB, SQL Server, Oracle och PostgreSQL.
SQLite har inte en CONCAT()
fungera. SQLite gör har en strängsammansättningsoperator (se nedan).
CONCAT_WS()
Funktion
Ett annat sätt att inkludera ett mellanslag är att använda CONCAT_WS()
fungera. Den här funktionen låter dig ange en separator som ska användas för att separera alla sammanlänkade argument.
Exempel:
SELECT CONCAT_WS(' ', 'Player', 456);
Resultat:
Player 456
Den här funktionen kan vara särskilt användbar om du har många argument att sammanfoga:
SELECT CONCAT_WS(', ', 'Red', 2, 'Green', 456, 'Black');
Resultat:
Red, 2, Green, 456, Black
I sådana fall behöver du bara ange separatorn en gång. I det här exemplet angav jag ett kommatecken och ett mellanslag som avgränsare.
RDBMS som har en CONCAT_WS()
funktioner inkluderar MySQL, MariaDB, SQL Server och PostgreSQL.
SQLite och Oracle har inte en CONCAT_WS()
funktion, men de gör har en strängsammansättningsoperator (se nedan).
Strängsammansättningsoperatören
De flesta RDBMS inkluderar en strängsammansättningsoperator som sammanfogar dess operander.
Om du använder SQLite är detta ditt enda alternativ.
Exempel:
SELECT 'Player' || 456;
Resultat:
Player456
Observera att i MySQL måste du först aktivera rörsammansättningsoperatorn.
Detsamma gäller MariaDB.
SQL-server
Ovanstående exempel fungerar inte i SQL Server. I SQL Server, använd plustecknet (+
) strängsammansättningsoperator.
Dessutom måste numret också konverteras till en sträng innan du försöker sammanfoga:
SELECT 'Player' + CAST(456 AS varchar(3));
Resultat:
Player456
Så här händer om jag försöker göra det utan att först konvertera numret till en sträng:
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 tror att vi försöker lägga till två siffror (eftersom +
är också additionsoperatorn) och returnerar därför ett fel, på grund av att en av operanderna är en sträng.