Подтвердить что ты не робот

Объединить два столбца базы данных в один столбец результатов

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

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

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

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

4b9b3361

Ответ 1

Стандартный способ 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

Ответ 2

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

SELECT CONCAT(field1, field2, field3) FROM table1

Поля NULL не будут нарушать вашу конкатенацию.

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

Используйте ISNULL для его преодоления.

Пример:

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

Затем это заменит ваш NULL-контент пустой строкой, которая сохранит операцию конкатенации от оценки в качестве общего результата NULL.

Ответ 6

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

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

Пример:

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

Ответ 7

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

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

Пример:

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

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