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

Sådan sammenkædes streng- og NULL-værdier i SQL Server

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.


  1. MySQL PÅ DUPLIKAT NØGLE - sidste indsættelses-id?

  2. måder at undgå globale temp-tabeller i oracle

  3. Hvorfor afrunder SQL Server resultater ved at dividere to heltal?

  4. Konvertering af Long til Varchar2