Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come concatenare stringhe e valori NULL in SQL Server

Problema:

Vorresti concatenare NULL con valori di stringa da una colonna diversa in SQL Server.

Esempio:

Il nostro database ha una tabella denominata children con i dati nelle seguenti colonne:id (chiave primaria), first_name , secondo_nome e cognome .

id nome secondo_nome cognome
1 Linda NULL Jackson
2 Maria Alice Thomson
3 NULL Steven NULL
4 NULL NULL Marrone

Vogliamo visualizzare il nome di una colonna, il secondo nome della colonna successiva e il cognome dell'ultima colonna come una stringa, anche se una delle colonne memorizza un NULL.

Soluzione 2:

Useremo il CONCAT() funzione. Ecco la domanda che scriveresti:

SELECT 
  CONCAT(first_name,  middle_name, last_name) AS name
FROM children;

Ecco il risultato:

nome
LindaJackson
MaryAliceThomson
Steven
Marrone

Discussione:

Usa il CONCAT() funzione per concatenare valori stringa da espressioni o colonne contenenti un NULL. Questa funzione accetta un elenco di stringhe (o NULL) e visualizza tutti questi valori in una stringa. Non esiste un separatore tra i valori, quindi i risultati (come nel nostro esempio) potrebbero non essere formattati come ti aspetteresti. Come possiamo correggere questo? Guarda un altro CONCAT() domanda:

Soluzione 2:

Ecco un'altra opzione di query:

SELECT 
  CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name
FROM children;

Ecco il risultato:

nome
Linda Jackson
Maria Alice Thomson
Steven
Marrone

Ora, oltre ai valori di stringa, questa funzione occupa anche degli spazi (posizionati tra i valori concatenati). Questo separa una parte del nome da un'altra. Ma come vediamo, anche questa soluzione non è l'ideale; i nomi completi senza secondo nome hanno uno spazio aggiuntivo, mentre i record con un solo nome hanno due spazi aggiuntivi.

In questo caso, il CONCAT_WS() la funzione è la soluzione migliore.

Soluzione 3:

Il CONCAT_WS() La funzione accetta un primo argomento aggiuntivo:un carattere che funge da separatore tra le stringhe. Ecco la domanda:

SELECT 
  CONCAT_WS(' ' , first_name, middle_name, last_name) AS name
FROM children;

E il risultato:

nome
Linda Jackson
Maria Alice Thomson
Steven
Marrone

Questa query mostra i nomi completi dei bambini, senza spazi non necessari.