Problem:
Du vil gerne sammenkæde NULL'er med strengværdier fra en anden kolonne i SQL Server.
Eksempel:
Vores database har en tabel med navnet children
med data i følgende kolonner:id (primær nøgle), fornavn , mellemnavn og efternavn .
id | fornavn | mellemnavn | efternavn |
---|---|---|---|
1 | Linda | NULL | Jackson |
2 | Mary | Alice | Thomson |
3 | NULL | Steven | NULL |
4 | NULL | NULL | Brun |
Vi ønsker at vise fornavnet fra én kolonne, mellemnavnet fra den næste kolonne og efternavnet fra den sidste kolonne som én streng, selvom en af kolonnerne gemmer et NULL.
Løsning 2:
Vi bruger CONCAT()
fungere. Her er den forespørgsel, du ville skrive:
SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
Her er resultatet:
navn |
---|
LindaJackson |
MaryAliceThomson |
Steven |
Brun |
Diskussion:
Brug CONCAT()
funktion til at sammenkæde strengværdier fra udtryk eller kolonner, der indeholder en NULL. Denne funktion tager en liste over strenge (eller NULL'er) og viser alle disse værdier i én streng. Der er ingen separator mellem værdierne, så resultaterne (som i vores eksempel) er muligvis ikke formateret, som du ville forvente. Hvordan kan vi rette dette? Se på en anden CONCAT()
forespørgsel:
Løsning 2:
Her er en anden forespørgselsmulighed:
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
Her er resultatet:
navn |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Brun |
Nu, bortset fra strengværdier, tager denne funktion også nogle mellemrum (placeret mellem de sammenkædede værdier). Dette adskiller en del af navnet fra en anden. Men som vi ser, er denne løsning heller ikke ideel; fulde navne uden mellemnavn har et ekstra mellemrum, mens posterne med kun ét navn har to ekstra mellemrum.
I dette tilfælde er CONCAT_WS()
funktion er den bedre løsning.
Løsning 3:
CONCAT_WS()
funktion tager et ekstra første argument:et tegn, der fungerer som en separator mellem strenge. Her er forespørgslen:
SELECT CONCAT_WS(' ' , first_name, middle_name, last_name) AS name FROM children;
Og resultatet:
navn |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Brun |
Denne forespørgsel viser børnenes fulde navne uden unødvendige mellemrum.