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

Como concatenar valores de string e NULL no SQL Server

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.