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 (
char
, nchar
, nvarchar
, 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.