Problema:
Você gostaria de concatenar NULLs com valores de string de uma coluna diferente no SQL Server.
Exemplo:
Nosso banco de dados tem uma tabela chamada
children
com dados nas seguintes colunas:id (chave primária), first_name , nome_meio e last_name . id | first_name | nome_meio | last_name |
---|---|---|---|
1 | Linda | NULO | Jackson |
2 | Maria | Alice | Thomson |
3 | NULO | Steven | NULO |
4 | NULO | NULO | Marrom |
Queremos exibir o primeiro nome de uma coluna, o nome do meio da próxima coluna e o sobrenome da última coluna como uma string, mesmo que uma das colunas armazene um NULL.
Solução 2:
Usaremos o
CONCAT()
função. Aqui está a consulta que você escreveria:SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
Aqui está o resultado:
nome |
---|
LindaJackson |
MaryAliceThomson |
Steven |
Marrom |
Discussão:
Use o
CONCAT()
função para concatenar valores de string de expressões ou colunas contendo um NULL. Esta função pega uma lista de strings (ou NULLs) e exibe todos esses valores em uma string. Não há separador entre os valores, portanto, os resultados (como em nosso exemplo) podem não ser formatados conforme o esperado. Como podemos corrigir isso? Veja outro CONCAT()
inquerir:Solução 2:
Aqui está outra opção de consulta:
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
Aqui está o resultado:
nome |
---|
Linda Jackson |
Maria Alice Thomson |
Steven |
Marrom |
Agora, além dos valores de string, esta função também ocupa alguns espaços (colocados entre os valores concatenados). Isso separa uma parte do nome da outra. Mas, como vemos, essa solução também não é a ideal; nomes completos sem nomes do meio têm um espaço extra, enquanto os registros com apenas um nome têm dois espaços extras.
Neste caso, o
CONCAT_WS()
função é a melhor solução. Solução 3:
O
CONCAT_WS()
A função recebe um primeiro argumento adicional:um caractere que serve como separador entre strings. Segue a consulta:SELECT CONCAT_WS(' ' , first_name, middle_name, last_name) AS name FROM children;
E o resultado:
nome |
---|
Linda Jackson |
Maria Alice Thomson |
Steven |
Marrom |
Esta consulta exibe os nomes completos dos filhos, sem espaços desnecessários.