Конкатенация со значениями NULL в SQL
Column1 Column2
------- -------
apple juice
water melon
banana
red berry
у меня есть таблица, которая имеет две колонки. Column1 имеет группу слов, а Column2 также имеет группу слов. Я хочу объединить их с оператором + без пробела.
например: applejuice
дело в том, что если во втором столбце есть значение null, я хочу иметь только первый элемент в результате.
например: банан
Result
------
applejuice
watermelon
banana
redberry
однако, когда я использую column1 + column2, он дает нулевое значение, если Comunm2 НОЛЬ. Я хочу, чтобы в результате получился "банан".
7 ответов
используйте функцию COALESCE для замены нулевых значений пустой строкой.
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 генерировала нулевой вывод, но это записывается с помощью ||
работы:
SELECT a || b
FROM SomeTable;
выход будет нулевым, если либо a
или b
или оба содержат NULL.
используя +
для объединения строк указывает, что вы используете расширение СУБД. Поведение может быть таким же, как требует стандарт - действительно, это, кажется, суть вашего вопрос.
некоторые СУБД-особенно Oracle-склонны рассматривать нулевые строки как эквивалентные пустым строкам;тогда вы можете весело объединяться. Однако это поведение не является строго стандартным, если оператор.
рассмотрите возможность использования COALESCE или NVL или IFNULL или какой-либо аналогичной функции для сопоставления NULL с пустой строкой перед объединением.
вы можете использовать условие case:
case when column_2 is not null
then concatenate
else column_1
end