Hvis du nogensinde har forsøgt at sammenkæde en streng med et nummer, mens du bruger SQL Server, men har modtaget en fejl, bør denne artikel rydde op for dig. Der er mere end én måde at udføre sammenkædning ved hjælp af T-SQL i SQL Server, og hvis du sammenkæder forskellige datatyper (som en streng og et tal), kan du modtage en fejl, afhængigt af hvordan du laver sammenkædningen.
Det, du skal huske, når du sammenkæder forskellige datatyper, er, at de først skal konverteres til den samme datatype. Mere specifikt, når en streng sammenkædes med et tal, skal nummeret konverteres til en streng, før det kan sammenkædes med strengen. Heldigvis gør SQL Server/T-SQL dette til en leg.
Denne artikel præsenterer seks måder at sammenkæde strenge med tal ved hjælp af T-SQL.
CONCAT()-funktionen
Den mest oplagte (og muligvis den bedste) måde at sammenkæde en streng og et tal på er at bruge CONCAT()
fungere. Dette giver dig mulighed for at angive strengen og tallet som to separate argumenter. SQL Server vil derefter sammenkæde dem, og din sammenkædning er fuldført.
Eksempel
SELECT CONCAT('Comments: ', 9) AS Result;
Resultat:
Result ----------- Comments: 9
Som du kan se, fungerer dette perfekt. Strengen og tallet præsenteres som ét felt.
Bemærk, at du ikke er begrænset til kun én streng og ét tal – CONCAT()
funktion kan acceptere op til 254 argumenter (dvs. du kan sammenføje op til 254 strenge/numre.
Bemærk også, at CONCAT()
konverterer implicit alle argumenter til strengtyper før sammenkædning. Også CONCAT()
konverterer implicit alle null-værdier til tomme strenge.
CONCAT_WS()-funktionen
Vi kan tage det forrige eksempel et skridt videre ved at bruge CONCAT_WS()
fungere. Denne funktion giver dig mulighed for at angive en separator.
For at angive en separator skal du blot tilføje det som det første argument. Angiv derefter strengen og tallet som andet og tredje argument.
SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;
Resultat:
Result ----------- Comments: 9
Bemærk, at denne funktion ikke nødvendigvis er egnet til at adskille navn/værdi-par, da separatoren tilføjes mellem hvert enkelt element, der er sammenkædet (så det vil også blive tilføjet mellem hvert par, hvis du har flere par). I vores tilfælde fungerer det fint, fordi vi kun har ét navn/værdi-par til at sammenkæde.
Du kan dog altid indlejre flere CONCAT_WS()
funktioner for at returnere den korrekte sammenkædning til dine behov (så du kan have en anden separator mellem hvert par).
Konverter()-funktionen
Hvis du af en eller anden grund ikke kan (eller ikke vil) bruge CONCAT()
eller CONCAT_WS()
funktioner, kan du udføre en sammenkædning ved hjælp af strengsammenkædningsoperatoren (+
). Når du bruger denne metode, skal du udføre eventuelle datatypekonverteringer manuelt.
En måde at konvertere mellem datatyper på er at bruge CONVERT()
funktion.
Sådan gør du det ved at bruge de samme data fra de tidligere eksempler:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Resultat:
Result ----------- Comments: 9
I dette tilfælde konverterer jeg hele tallet til varchar(12), men det kan være enhver datatype og længde, du har brug for.
CAST()-funktionen
CAST()
Funktionen ligner meget CONVERT()
fungere. Den største forskel er, at CAST()
er standard ANSI og CONVERT()
er specifik for T-SQL. Når det er sagt, CONVERT()
har nogle ekstra funktioner, men i forbindelse med disse eksempler kan du bruge begge dele.
Her er CAST()
version med de samme data fra de foregående eksempler:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Resultat:
Result ----------- Comments: 9
TRY_CONVERT()-funktionen
Et potentielt problem ved brug af CONVERT()
funktion er, at hvis konverteringen ikke lykkes, får du en fejl. Selvom dette er fint i mange tilfælde, er det i nogle tilfælde måske ikke ønskeligt. I sådanne tilfælde kan du muligvis finde TRY_CONVERT()
mere passende.
TRY_CONVERT()
funktion konverterer datatypen ligesom CONVERT()
funktion gør. Men hvis dataene ikke kan konverteres, vil de returnere null
.
For eksempel, hvis vi forsøger at gøre følgende, får vi en fejlmeddelelse:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Resultat:
Error: Arithmetic overflow error converting numeric to data type varchar.
Men hvis vi bruger TRY_CONVERT()
, får vi null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Resultat:
Result ------ null
Du kan bruge betinget programmering i dette tilfælde til at udføre en anden opgave afhængigt af resultatet.
TRY_CAST()-funktionen
TRY_CAST()
funktion fungerer på samme måde. Den konverterer datatypen ligesom CAST()
funktion gør, og hvis dataene ikke kan konverteres, returnerer den null
.
For eksempel giver dette en fejl:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Resultat:
Error: Arithmetic overflow error converting numeric to data type varchar.
Men hvis vi bruger TRY_CAST()
i stedet får vi null
:
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Resultat:
Result ------ null