sql >> Databáze >  >> RDS >> Sqlserver

Jak zřetězit hodnoty řetězce a NULL na serveru SQL Server

Problém:

Chtěli byste zřetězit hodnoty NULL s hodnotami řetězců z jiného sloupce na serveru SQL.

Příklad:

Naše databáze obsahuje tabulku s názvem children s údaji v následujících sloupcích:id (primární klíč), first_name , prostřední_jméno a last_name .

id first_name prostřední_jméno last_name
1 Linda NULL Jackson
2 Marie Alice Thomson
3 NULL Steven NULL
4 NULL NULL Hnědá

Chceme zobrazit křestní jméno z jednoho sloupce, prostřední jméno z dalšího sloupce a příjmení z posledního sloupce jako jeden řetězec, i když jeden ze sloupců obsahuje NULL.

Řešení 2:

Použijeme CONCAT() funkce. Zde je dotaz, který byste napsali:

SELECT 
  CONCAT(first_name,  middle_name, last_name) AS name
FROM children;

Zde je výsledek:

name
LindaJackson
MaryAliceThomson
Steven
Hnědá

Diskuse:

Použijte CONCAT() funkce ke zřetězení řetězcových hodnot z výrazů nebo sloupců obsahujících NULL. Tato funkce vezme seznam řetězců (nebo NULL) a zobrazí všechny tyto hodnoty v jednom řetězci. Mezi hodnotami není žádný oddělovač, takže výsledky (jako v našem příkladu) nemusí být formátovány tak, jak byste očekávali. Jak to můžeme napravit? Podívejte se na další CONCAT() dotaz:

Řešení 2:

Zde je další možnost dotazu:

SELECT 
  CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name
FROM children;

Zde je výsledek:

name
Linda Jackson
Mary Alice Thomson
Steven
Hnědá

Tato funkce nyní kromě řetězcových hodnot zabírá také nějaké mezery (umístěné mezi zřetězenými hodnotami). To odděluje jednu část jména od druhé. Ale jak vidíme, toto řešení také není ideální; celá jména bez druhých jmen mají mezeru navíc, zatímco záznamy s pouze jedním jménem mají mezery dvě navíc.

V tomto případě CONCAT_WS() funkce je lepší řešení.

Řešení 3:

CONCAT_WS() funkce přebírá další první argument:znak, který slouží jako oddělovač mezi řetězci. Zde je dotaz:

SELECT 
  CONCAT_WS(' ' , first_name, middle_name, last_name) AS name
FROM children;

A výsledek:

name
Linda Jackson
Mary Alice Thomson
Steven
Hnědá

Tento dotaz zobrazí celá jména dětí bez jakýchkoli nepotřebných mezer.


  1. Jak nastavit výchozí uživatelské heslo v PostgreSQL

  2. Rámec Apache Spark Job Run!

  3. Oracle Locks &table locks:Jak to funguje

  4. android.database.sqlite.SQLiteCantOpenDatabaseException:neznámá chyba (kód 14):Nelze otevřít databázi