Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak łączyć ciągi i wartości NULL w SQL Server

Problem:

Chcesz połączyć wartości NULL z wartościami łańcuchowymi z innej kolumny w SQL Server.

Przykład:

Nasza baza danych zawiera tabelę o nazwie children z danymi w następujących kolumnach:id (klucz podstawowy), imię , drugie imię i nazwisko .

id imię drugie imię nazwisko
1 Linda NULL Jackson
2 Maryi Alicja Thomson
3 NULL Steven NULL
4 NULL NULL Brązowy

Chcemy wyświetlić imię z jednej kolumny, drugie imię z następnej kolumny i nazwisko z ostatniej kolumny jako jeden ciąg, nawet jeśli jedna z kolumn przechowuje NULL.

Rozwiązanie 2:

Użyjemy CONCAT() funkcjonować. Oto zapytanie, które napiszesz:

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

Oto wynik:

nazwa
LindaJackson
MaryAliceThomson
Steven
Brązowy

Dyskusja:

Użyj CONCAT() funkcja do łączenia wartości ciągu z wyrażeń lub kolumn zawierających wartość NULL. Ta funkcja pobiera listę ciągów (lub wartości NULL) i wyświetla wszystkie te wartości w jednym ciągu. Nie ma separatora między wartościami, więc wyniki (jak w naszym przykładzie) mogą nie być sformatowane zgodnie z oczekiwaniami. Jak możemy to naprawić? Spójrz na inną CONCAT() zapytanie:

Rozwiązanie 2:

Oto kolejna opcja zapytania:

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

Oto wynik:

nazwa
Linda Jackson
Mary Alice Thomson
Steven
Brązowy

Teraz, oprócz wartości łańcuchowych, ta funkcja zajmuje również kilka spacji (umieszczanych między połączonymi wartościami). To oddziela jedną część nazwy od drugiej. Ale jak widzimy, to rozwiązanie również nie jest idealne; pełne imiona bez drugiego imienia mają dodatkową spację, podczas gdy rekordy z tylko jednym imieniem mają dwie dodatkowe spacje.

W tym przypadku CONCAT_WS() funkcja jest lepszym rozwiązaniem.

Rozwiązanie 3:

CONCAT_WS() funkcja przyjmuje dodatkowy pierwszy argument:znak, który służy jako separator między ciągami. Oto zapytanie:

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

A wynik:

nazwa
Linda Jackson
Mary Alice Thomson
Steven
Brązowy

To zapytanie wyświetla pełne imiona dzieci bez zbędnych spacji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dynamiczny SQL do generowania nazw kolumn?

  2. Wyszukiwanie pełnotekstowe nie działa, jeśli dołączono słowo zatrzymania, mimo że lista słów zatrzymania jest pusta

  3. Nieskończona pętla CTE z OPCJA (maksymalna rekurencja 0)

  4. Wykonanie funkcji COUNT SQL

  5. Jak ustawić wartość logiczną w SQL?