Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да конкатенирате низ и стойности NULL в SQL Server

Проблем:

Искате да свържете NULL числа със стойности на низове от различна колона в SQL Server.

Пример:

Нашата база данни има таблица с име children с данни в следните колони:id (първичен ключ), first_name , средно_име и фамилно_име .

id first_name междинно_име фамилно_име
1 Линда NULL Джаксън
2 Мери Алиса Томсън
3 NULL Стивън NULL
4 NULL NULL Кафяв

Искаме да покажем първото име от една колона, средното име от следващата колона и фамилното име от последната колона като един низ, дори ако една от колоните съхранява NULL.

Решение 2:

Ще използваме CONCAT() функция. Ето заявката, която бихте написали:

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

Ето резултата:

name
ЛиндаДжексън
MaryAliceThomson
Стивън
Кафяв

Дискусия:

Използвайте CONCAT() функция за конкатениране на низови стойности от изрази или колони, съдържащи NULL. Тази функция приема списък от низове (или NULL) и показва всички тези стойности в един низ. Няма разделител между стойностите, така че резултатите (както в нашия пример) може да не са форматирани, както бихте очаквали. Как можем да коригираме това? Вижте друг CONCAT() заявка:

Решение 2:

Ето още една опция за заявка:

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

Ето резултата:

name
Линда Джаксън
Мери Алис Томсън
Стивън
Кафяв

Сега, освен стойностите на низовете, тази функция също заема някои интервали (поставени между конкатенираните стойности). Това отделя една част от името от друга. Но както виждаме, това решение също не е идеално; пълните имена без бащини имат допълнително пространство, докато записите само с едно име имат две допълнителни интервали.

В този случай CONCAT_WS() функцията е по-доброто решение.

Решение 3:

CONCAT_WS() функцията приема допълнителен първи аргумент:символ, който служи като разделител между низовете. Ето заявката:

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

И резултатът:

name
Линда Джаксън
Мери Алис Томсън
Стивън
Кафяв

Тази заявка показва пълните имена на децата, без ненужни интервали.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на RegEx в SQL Server

  2. Как да редактирам таблица, за да активирам CASCADE DELETE?

  3. Преглед на историята на заданията на агент на SQL Server с SSMS

  4. Как да върнете *всичко* от съхранена процедура с помощта на JDBC

  5. SQL Server:Разлика между PARTITION BY и GROUP BY