Объединить два столбца базы данных в один столбец результатов
Я использую следующий SQL для конкатенации нескольких столбцов базы данных из одной таблицы в один столбец в результирующем наборе:
SELECT (field1 + '' + field2 + '' + field3) FROM table1
Когда одно из полей имеет значение null, я получил нулевой результат для всего выражения конкатенации. Как я могу это преодолеть?
База данных - это MS SQL Server 2008. Кстати, это лучший способ конкатенации столбцов базы данных? Существует ли какой-либо стандартный SQL?
Ответы
Ответ 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 или что-то еще