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.