Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come aggiungere un separatore a una stringa concatenata in SQL Server – CONCAT_WS()

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 (charncharnvarcharvarchar ).

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.