No MySQL, o
CONCAT_WS()
A função permite adicionar um separador a strings concatenadas. Se você apenas usar o CONCAT()
função, você não teria separador (a menos que você tenha adicionado explicitamente um separador como um argumento entre cada argumento de string). Um uso comum do
CONCAT_WS()
função é criar uma lista delimitada por vírgulas. Aqui está um exemplo:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Resultado:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
E você pode adicionar um espaço lá se quiser:
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Resultado:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
O Separador
Não há nada para dizer que o separador deve ser uma vírgula. O separador pode ser qualquer string.
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 = 'NZL';
Resultado:
+---------------------------+ | Location | +---------------------------+ | Auckland, New Zealand | | Christchurch, New Zealand | | Manukau, New Zealand | | North Shore, New Zealand | | Waitakere, New Zealand | | Wellington, New Zealand | | Dunedin, New Zealand | | Hamilton, New Zealand | | Lower Hutt, New Zealand | +---------------------------+
Valores NULOS
Se algum dos argumentos for um
NULL
valor, o MySQL pulará esse valor e seu separador, mas ainda processará os outros. Exemplo:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Resultado:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
Separador de valor NULO
Se o próprio separador for um
NULL
valor, a operação de concatenação retornará NULL
. Exemplo:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Resultado:
+----------+ | Location | +----------+ | NULL | +----------+
Essa é uma das diferenças entre MySQL e T-SQL (SQL Server, Azure). Em T-SQL, se o separador for um
NULL
value, os valores da string ainda são concatenados, mas sem um separador.