Als u in SQL Server en Azure twee of meer tekenreeksen moet samenvoegen, kunt u de T-SQL CONCAT()
gebruiken functie. Zoals bij elke basisaaneenschakeling, voegt deze functie de strings samen, end-to-end.
Maar wat als u een scheidingsteken tussen elke tekenreeks moet toevoegen?
U wilt bijvoorbeeld een door komma's gescheiden lijst met tekenreeksen maken. In dit geval wilt u een komma tussen elke tekenreeks invoegen. Zoals dit:
Paris, France
In plaats van dit:
ParisFrance
Gelukkig biedt T-SQL de CONCAT_WS()
functie die u daarbij helpt. De CONCAT_WS()
functie werkt net als de CONCAT()
functie, behalve dat er een extra argument voor nodig is – het scheidingsteken dat u wilt gebruiken.
Hier is een voorbeeld:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Resultaat:
Location ------------ Paris,France
En je kunt daar een spatie toevoegen als je wilt:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Resultaat:
Location ------------- Paris, France
De scheidingsteken
Er is niets om te zeggen dat het scheidingsteken een komma moet zijn. Het scheidingsteken kan een uitdrukking zijn van elk type teken (char
, nchar
, nvarchar
, of varchar
).
Hier is hetzelfde voorbeeld als het vorige, behalve dat dit een ander scheidingsteken gebruikt.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Resultaat:
Location -------------- Paris - France
Een databasevoorbeeld
Hier is een voorbeeld van het ophalen van gegevens uit een database en het combineren van twee kolommen in één, gescheiden door een komma:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'THA';
Resultaat:
Location --------------------------- Bangkok, Thailand Nonthaburi, Thailand Nakhon Ratchasima, Thailand Chiang Mai, Thailand Udon Thani, Thailand Hat Yai, Thailand Khon Kaen, Thailand Pak Kret, Thailand Nakhon Sawan, Thailand Ubon Ratchathani, Thailand Songkhla, Thailand Nakhon Pathom, Thailand
NULL-waarden
Als een van de argumenten een NULL
. is waarde, zal SQL Server die waarde en zijn scheidingsteken overslaan, maar het zal nog steeds de andere verwerken.
Voorbeeld:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Resultaat:
Location ------------- Paris, France
NULL-waardescheidingsteken
Als het scheidingsteken zelf een NULL
is waarde, wordt de aaneenschakeling nog steeds uitgevoerd, maar zonder scheidingsteken.
Voorbeeld:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Resultaat:
Location ----------- ParisFrance
Dit is een van de verschillen tussen T-SQL en MySQL (MySQL heeft ook een CONCAT_WS()
functie). In MySQL, als het scheidingsteken een NULL
. is waarde, resulteert de aaneenschakeling in een NULL
waarde.