Problem:
Du vill sammanfoga NULL med strängvärden från en annan kolumn i SQL Server.
Exempel:
Vår databas har en tabell som heter children
med data i följande kolumner:id (primär nyckel), förnamn , mellannamn och efternamn .
id | förnamn | mellannamn | efternamn |
---|---|---|---|
1 | Linda | NULL | Jackson |
2 | Maria | Alice | Thomson |
3 | NULL | Steven | NULL |
4 | NULL | NULL | Brun |
Vi vill visa förnamnet från en kolumn, mellannamnet från nästa kolumn och efternamnet från den sista kolumnen som en sträng, även om en av kolumnerna lagrar en NULL.
Lösning 2:
Vi använder CONCAT()
fungera. Här är frågan du skulle skriva:
SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
Här är resultatet:
namn |
---|
LindaJackson |
MaryAliceThomson |
Steven |
Brun |
Diskussion:
Använd CONCAT()
funktion för att sammanfoga strängvärden från uttryck eller kolumner som innehåller en NULL. Denna funktion tar en lista med strängar (eller NULL) och visar alla dessa värden i en sträng. Det finns ingen separator mellan värdena, så resultaten (som i vårt exempel) kanske inte är formaterade som du förväntar dig. Hur kan vi rätta till detta? Titta på en annan CONCAT()
fråga:
Lösning 2:
Här är ett annat frågealternativ:
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
Här är resultatet:
namn |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Brun |
Nu, förutom strängvärden, tar den här funktionen också några mellanslag (placerade mellan de sammanlänkade värdena). Detta skiljer en del av namnet från en annan. Men som vi ser är denna lösning inte heller idealisk; fullständiga namn utan mellannamn har ett extra mellanslag, medan posterna med endast ett namn har två extra mellanslag.
I det här fallet, CONCAT_WS()
funktion är den bättre lösningen.
Lösning 3:
CONCAT_WS()
funktion tar ytterligare ett första argument:ett tecken som fungerar som en separator mellan strängar. Här är frågan:
SELECT CONCAT_WS(' ' , first_name, middle_name, last_name) AS name FROM children;
Och resultatet:
namn |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Brun |
Den här frågan visar barnens fullständiga namn, utan onödiga mellanslag.