Проблем:
Искате да свържете 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 |
---|
Линда Джаксън |
Мери Алис Томсън |
Стивън |
Кафяв |
Тази заявка показва пълните имена на децата, без ненужни интервали.