объединить два столбца базы данных в один столбец набора результатов - PullRequest
46 голосов
/ 21 июня 2011

Я использую следующий SQL для объединения нескольких столбцов базы данных из одной таблицы в один столбец в наборе результатов:

SELECT (field1 + '' + field2 + '' + field3) FROM table1

Когда одно из полей является нулевым, я получаю нулевой результатдля всего выражения конкатенации.Как я могу преодолеть это?

База данных MS SQL Server 2008. Кстати, это лучший способ для объединения столбцов базы данных?Есть ли какой-нибудь стандартный SQL, делающий это?

Ответы [ 7 ]

44 голосов
/ 21 июня 2011

Стандартный способ SQL сделать это будет:

SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1

Пример:

INSERT INTO table1 VALUES ('hello', null, 'world');
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1;

helloworld
38 голосов
/ 11 сентября 2014

Если вы используете SQL 2012 или выше, вы можете использовать функцию CONCAT:

SELECT CONCAT(field1, field2, field3) FROM table1

NULL поля не нарушат вашу конкатенацию.

@ bummi - Спасибо за комментарий - отредактировал мой ответ, чтобы соответствовать ему.

14 голосов
/ 21 июня 2011

Нормальное поведение с NULL состоит в том, что любая операция, включая NULL, приводит к NULL ...

- 9 * NULL  = NULL  
- NULL + '' = NULL  
- etc  

Чтобы преодолеть это, используйте ISNULL или COALESCE для замены любых экземпляров NULL чем-то другим.

SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
5 голосов
/ 21 июня 2011

Если у вас возникли проблемы со значениями NULL, используйте функцию COALESCE, чтобы заменить NULL значением по вашему выбору. Ваш запрос будет выглядеть так:

SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1

http://www.codeproject.com/KB/database/DataCrunching.aspx

4 голосов
/ 21 июня 2011

Используйте ISNULL, чтобы преодолеть его.

Пример:

SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1

Это заменит содержимое NULL на пустую строку, которая не даст операции конкатенации оценивать как общий результат NULL.

1 голос
/ 27 ноября 2017

Just Cast Column As Varchar (Размер)

Если оба столбца являются числовыми, используйте приведенный ниже код.

Пример:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table

Каков будет размерcol3 это будет 40 или что-то еще

1 голос
/ 29 февраля 2016

Если оба столбца являются числовыми, используйте этот код

Just Cast Column As Varchar (размер)

Пример:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...