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.