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.