Als je ooit hebt geprobeerd een tekenreeks met een getal samen te voegen tijdens het gebruik van SQL Server, maar een fout hebt ontvangen, zou dit artikel de zaken voor je moeten ophelderen. Er is meer dan één manier om samenvoeging uit te voeren met T-SQL in SQL Server, en als u verschillende gegevenstypen aan elkaar koppelt (zoals een tekenreeks en een getal), kunt u een foutmelding krijgen, afhankelijk van hoe u de aaneenschakeling uitvoert.
Het ding om te onthouden bij het aaneenschakelen van verschillende gegevenstypen is dat ze eerst naar hetzelfde gegevenstype moeten worden geconverteerd. Meer specifiek, bij het aaneenschakelen van een tekenreeks met een getal, moet het nummer worden geconverteerd naar een tekenreeks voordat het kan worden samengevoegd met de tekenreeks. Gelukkig maakt SQL Server/T-SQL dit een makkie.
Dit artikel presenteert zes manieren om strings samen te voegen met getallen met behulp van T-SQL.
De CONCAT()-functie
De meest voor de hand liggende (en mogelijk de beste) manier om een tekenreeks en een getal samen te voegen, is door de CONCAT()
te gebruiken functie. Hierdoor kunt u de tekenreeks en het getal als twee afzonderlijke argumenten opgeven. SQL Server zal ze dan samenvoegen en uw aaneenschakeling is voltooid.
Voorbeeld
SELECT CONCAT('Comments: ', 9) AS Result;
Resultaat:
Result ----------- Comments: 9
Zoals je ziet werkt dit perfect. De tekenreeks en het nummer worden als één veld weergegeven.
Merk op dat je niet beperkt bent tot slechts één tekenreeks en één cijfer - de CONCAT()
functie kan maximaal 254 argumenten accepteren (d.w.z. u kunt maximaal 254 tekenreeksen/nummers samenvoegen.
Merk ook op dat CONCAT()
converteert impliciet alle argumenten naar tekenreekstypen vóór aaneenschakeling. Ook CONCAT()
converteert impliciet alle null-waarden naar lege tekenreeksen.
De CONCAT_WS() Functie
We kunnen het vorige voorbeeld een stap verder nemen door de CONCAT_WS()
. te gebruiken functie. Met deze functie kunt u een scheidingsteken opgeven.
Om een scheidingsteken op te geven, voegt u dat gewoon toe als het eerste argument. Geef vervolgens de tekenreeks en het nummer op als het tweede en derde argument.
SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;
Resultaat:
Result ----------- Comments: 9
Merk op dat deze functie niet per se geschikt is voor het scheiden van naam/waarde-paren, aangezien het scheidingsteken wordt toegevoegd tussen elk afzonderlijk item dat is aaneengeschakeld (dus het wordt ook tussen elk paar toegevoegd in het geval u meerdere paren hebt). In ons geval werkt het prima, omdat we maar één naam/waarde-paar hebben om samen te voegen.
U kunt echter altijd meerdere CONCAT_WS()
functies om de juiste aaneenschakeling voor uw behoeften te retourneren (zodat u een ander scheidingsteken tussen elk paar kunt hebben).
De CONVERT() Functie
Als u om de een of andere reden de CONCAT()
niet kunt (of wilt) gebruiken of CONCAT_WS()
functies, kunt u een aaneenschakeling uitvoeren met behulp van de tekenreeksaaneenschakelingsoperator (+
). Wanneer u deze methode gebruikt, moet u alle gegevenstypeconversies handmatig uitvoeren.
Een manier om tussen gegevenstypen te converteren is door de CONVERT()
functie.
U doet dit als volgt met dezelfde gegevens uit de vorige voorbeelden:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Resultaat:
Result ----------- Comments: 9
In dit geval converteer ik het gehele getal naar varchar (12), maar dit kan elk gegevenstype en elke gewenste lengte zijn.
De CAST()-functie
De CAST()
functie lijkt erg op de CONVERT()
functie. Het belangrijkste verschil is dat CAST()
is standaard ANSI en CONVERT()
is specifiek voor T-SQL. Dat gezegd hebbende, CONVERT()
heeft wel wat extra functionaliteit, maar voor deze voorbeelden zou je een van beide kunnen gebruiken.
Hier is de CAST()
versie met dezelfde gegevens uit de vorige voorbeelden:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Resultaat:
Result ----------- Comments: 9
De TRY_CONVERT() Functie
Een mogelijk probleem bij het gebruik van de CONVERT()
functie is dat, als de conversie niet lukt, je een foutmelding krijgt. Hoewel dit in veel gevallen prima is, is dit in sommige gevallen misschien niet wenselijk. In dergelijke gevallen vindt u mogelijk TRY_CONVERT()
meer geschikt.
De TRY_CONVERT()
functie converteert het gegevenstype net zoals de CONVERT()
functie doet. Als de gegevens echter niet kunnen worden geconverteerd, wordt null
. geretourneerd .
Als we bijvoorbeeld het volgende proberen te doen, krijgen we een foutmelding:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Resultaat:
Error: Arithmetic overflow error converting numeric to data type varchar.
Als we echter TRY_CONVERT()
. gebruiken , we krijgen null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Resultaat:
Result ------ null
U kunt in dit geval conditioneel programmeren gebruiken om een andere taak uit te voeren, afhankelijk van het resultaat.
De TRY_CAST() Functie
De TRY_CAST()
functie werkt op dezelfde manier. Het converteert het gegevenstype net zoals de CAST()
functie doet, en als de gegevens niet kunnen worden geconverteerd, wordt null
geretourneerd .
Dit geeft bijvoorbeeld een foutmelding:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Resultaat:
Error: Arithmetic overflow error converting numeric to data type varchar.
Maar als we TRY_CAST()
. gebruiken in plaats daarvan krijgen we null
:
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Resultaat:
Result ------ null