In SQL Server e Azure, se devi concatenare due o più stringhe, puoi utilizzare T-SQL CONCAT()
funzione. Come con qualsiasi operazione di concatenazione di base, questa funzione unisce le stringhe, end-to-end.
Ma cosa succede se devi aggiungere un separatore tra ogni stringa?
Ad esempio, potresti voler creare un elenco di stringhe separate da virgole. In questo caso, vorrai inserire una virgola tra ogni stringa. In questo modo:
Paris, France
Invece di questo:
ParisFrance
Fortunatamente, T-SQL fornisce il CONCAT_WS()
funzione che ti aiuta a fare esattamente questo. Il CONCAT_WS()
la funzione funziona proprio come CONCAT()
funzione, tranne per il fatto che richiede un argomento aggiuntivo:il separatore che desideri utilizzare.
Ecco un esempio:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Risultato:
Location ------------ Paris,France
E puoi aggiungere uno spazio lì dentro se vuoi:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Risultato:
Location ------------- Paris, France
Il separatore
Non c'è niente da dire che il separatore deve essere una virgola. Il separatore può essere un'espressione di qualsiasi tipo di carattere (char
, nchar
, nvarchar
o varchar
).
Ecco lo stesso esempio del precedente, tranne per il fatto che questo utilizza un separatore diverso.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Risultato:
Location -------------- Paris - France
Un esempio di database
Ecco un esempio di recupero di dati da un database e di combinazione di due colonne in una, separate da una virgola:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'THA';
Risultato:
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
Valori NULL
Se uno qualsiasi degli argomenti è un NULL
value, SQL Server ignorerà quel valore e il relativo separatore, ma elaborerà comunque gli altri.
Esempio:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Risultato:
Location ------------- Paris, France
Separatore di valore NULL
Se il separatore stesso è un NULL
valore, l'operazione di concatenazione verrà comunque eseguita, ma senza un separatore.
Esempio:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Risultato:
Location ----------- ParisFrance
Questa è una delle differenze tra T-SQL e MySQL (MySQL ha anche un CONCAT_WS()
funzione). In MySQL, se il separatore è NULL
valore, la concatenazione risulta in un NULL
valore.