Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como adicionar um separador a uma string concatenada no SQL Server – CONCAT_WS()


No SQL Server e no Azure, se você precisar concatenar duas ou mais strings, poderá usar o T-SQL CONCAT() função. Como em qualquer operação básica de concatenação, esta função une as strings, de ponta a ponta.

Mas e se você precisar adicionar um separador entre cada string?

Por exemplo, você pode querer fazer uma lista de strings separadas por vírgulas. Nesse caso, você deseja inserir uma vírgula entre cada string. Assim:
Paris, France

Em vez disso:
ParisFrance

Felizmente, o T-SQL fornece o CONCAT_WS() função que ajuda você a fazer exatamente isso. O CONCAT_WS() A função funciona exatamente como a CONCAT() função, exceto que leva um argumento extra - o separador que você gostaria de usar.



Aqui está um exemplo:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;

Resultado:
Location    
------------
Paris,France

E você pode adicionar um espaço lá se quiser:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;

Resultado:
Location     
-------------
Paris, France

O Separador


Não há nada para dizer que o separador deve ser uma vírgula. O separador pode ser uma expressão de qualquer tipo de caractere (charncharnvarchar , ou varchar ).

Aqui está o mesmo exemplo do anterior, exceto que este usa um separador diferente.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;

Resultado:
Location      
--------------
Paris - France

Um exemplo de banco de dados


Aqui está um exemplo de recuperação de dados de um banco de dados e combinação de duas colunas em uma, separadas por uma vírgula:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location
FROM city
INNER JOIN country ON
city.CountryCode = country.Code
WHERE country.Code = 'THA';

Resultado:
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

Valores NULOS


Se algum dos argumentos for um NULL valor, o SQL Server ignorará esse valor e seu separador, mas ainda processará os outros.

Exemplo:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;

Resultado:
Location     
-------------
Paris, France

Separador de valor NULO


Se o próprio separador for um NULL valor, a operação de concatenação ainda será executada, mas sem separador.

Exemplo:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;

Resultado:
Location   
-----------
ParisFrance

Esta é uma das diferenças entre T-SQL e MySQL (MySQL também tem um CONCAT_WS() função). No MySQL, se o separador for um NULL valor, a concatenação resulta em um NULL valor.