Ответ 1
Используйте функцию COALESCE для замены значений NULL пустой строкой.
SELECT Column1 + COALESCE(Column2, '') AS Result
FROM YourTable
Column1 Column2
------- -------
apple juice
water melon
banana
red berry
У меня есть таблица, которая имеет два столбца. Column1 имеет группу слов, а Column2 также имеет группу слов. Я хочу объединить их с оператором + без пробела.
Например: applejuice
Дело в том, что если во втором столбце есть нулевое значение, я хочу получить только первый элемент.
Например: banana
Result
------
applejuice
watermelon
banana
redberry
Однако, когда я использую column1 + column2, он дает значение NULL, если Comunm2 равно NULL. В результате я хочу получить "банан".
Используйте функцию COALESCE для замены значений NULL пустой строкой.
SELECT Column1 + COALESCE(Column2, '') AS Result
FROM YourTable
Вы можете сделать union
:
(SELECT Column1 + Column2 FROM Table1 WHERE Column2 is not NULL)
UNION
(SELECT Column1 FROM Table1 WHERE Column2 is NULL);
Я не уверен, что вы используете в качестве своей базы данных, но я бы искал функцию "coalesce" для вашего конкретного диалекта SQL и использовал это.
Знак + для конкатенации в TSQL по умолчанию будет комбинировать строку + null в null как неизвестное значение.
Вы можете сделать одну из двух вещей, вы можете изменить эту переменную для сеанса, который контролирует, что Sql должен делать с помощью Nulls
http://msdn.microsoft.com/en-us/library/ms176056.aspx
Или вы можете объединить каждый столбец в пустую строку перед конкатенацией.
COALESCE(Column1, '')
Стандартный SQL требует, чтобы конкатенация строк с использованием NULL генерировала вывод NULL, но это записывается с помощью операции ||
:
SELECT a || b
FROM SomeTable;
Выход будет пустым, если либо a
, либо b
, либо оба содержат NULL.
Использование +
для конкатенации строк указывает на то, что вы используете расширение, специфичное для СУБД. Поведение может быть таким же, как требуется стандарту - действительно, это похоже на суть вашего вопроса.
Некоторые СУБД, особенно Oracle, склонны обрабатывать нулевые строки как эквивалентные пустым строкам; то вы можете весело сразиться. Однако это поведение не является строго стандартным, если используется оператор ||
.
Рассмотрите возможность использования COALESCE или NVL или IFNULL или некоторой подобной функции для сопоставления NULL с пустой строкой перед конкатенацией.
Если вы используете MySq, используйте ifnull (Column2, '')
Вы можете использовать условие случая:
case when column_2 is not null
then concatenate
else column_1
end
Несколько сообщений, которые я сделал с пометкой MSSQL, были переименованы в 'SQL' модератором. Итак, я предполагаю, что вы используете MSSQL
COALESCE вернет ПЕРВОЕ ненулевое значение.
SELECT COALESCE('a', NULL, 'c')
вернет только "а"
Если вы хотите Имя + Фамилия, где иногда один или другой имеет значение NULL, используйте CONCAT. Concat добавляет строки вместе и заменяет NULLS на ненулевое значение длины 0.
SELECT CONCAT('a', NULL, 'c')
вернет 'AC'
Если вы хотите Fn пробел + отчество среднего + LN, объедините concatinate с CONCAT:
SELECT CONCAT('a' + ' ', NULL + ' ', 'c')
Вернет "с".
Пробел после среднего имени (null) удаляется с помощью + и NULL.
NULL + '' равно нулю.
Поэтому в тех случаях, когда Middlename или Firstname имеют значение null, вы не получите лишних лишних пробелов.