Конкатенация со значениями 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, '')

http://msdn.microsoft.com/en-us/library/ms190349.aspx


стандартный SQL требует, чтобы конкатенация строк с использованием NULL генерировала нулевой вывод, но это записывается с помощью || работы:

SELECT a || b
  FROM SomeTable;

выход будет нулевым, если либо a или b или оба содержат NULL.

используя + для объединения строк указывает, что вы используете расширение СУБД. Поведение может быть таким же, как требует стандарт - действительно, это, кажется, суть вашего вопрос.

некоторые СУБД-особенно Oracle-склонны рассматривать нулевые строки как эквивалентные пустым строкам;тогда вы можете весело объединяться. Однако это поведение не является строго стандартным, если оператор.

рассмотрите возможность использования COALESCE или NVL или IFNULL или какой-либо аналогичной функции для сопоставления NULL с пустой строкой перед объединением.


Если вы используете MySq, используйте ifnull (Column2, ")


вы можете использовать условие case:

case when column_2 is not null 
     then concatenate
     else column_1
end