在SQL中与NULL值连接

时间:2011-11-22 20:59:38

标签: sql database string null concatenation

Column1      Column2
-------      -------
 apple        juice
 water        melon
 banana
 red          berry       

我有一个有两列的表。 Column1有一组单词,Column2也有一组单词。我想用+运算符连接它们而没有空格。

例如:applejuice

问题是,如果第二列中有空值,我只想将第一个元素作为结果。

例如:banana

Result
------
applejuice
watermelon
banana
redberry

但是,当我使用column1 + column2时,如果Comunm2为NULL,则它给出NULL值。我希望结果是“香蕉”。

8 个答案:

答案 0 :(得分:37)

使用COALESCE函数将NULL值替换为空字符串。

SELECT Column1 + COALESCE(Column2, '') AS Result
    FROM YourTable

答案 1 :(得分:1)

您可以执行union

(SELECT Column1 + Column2 FROM Table1 WHERE Column2 is not NULL)
UNION
(SELECT Column1 FROM Table1 WHERE Column2 is NULL);

答案 2 :(得分:0)

我不确定您使用的数据库是什么,但我会为您的特定SQL方言寻找“合并”功能并使用它。

答案 3 :(得分:0)

TSQL中串联的+符号默认将string + null组合为null作为未知值。

你可以做两件事之一,你可以改变这个变量用于控制Sql应该用Null做什么的会话

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

或者,您可以在连接之前将每个列合并为空字符串。

COALESCE(Column1, '')

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

答案 4 :(得分:0)

标准SQL要求涉及NULL的字符串连接生成NULL输出,但这是使用||操作编写的:

SELECT a || b
  FROM SomeTable;

如果ab或两者都包含NULL,则输出将为null。

使用+连接字符串表示您正在使用特定于DBMS的扩展。行为可能与标准要求相同 - 事实上,这似乎是你问题的要点。

某些DBMS(尤其是Oracle)倾向于将空字符串视为等同于空字符串;然后你可以愉快地连接起来。但是,如果使用||运算符,则该行为不是严格符合标准的。

考虑使用COALESCE或NVL或IFNULL或类似函数在连接之前将NULL映射到空字符串。

答案 5 :(得分:0)

如果您使用的是MySq,请使用ifnull(Column2,'')

答案 6 :(得分:0)

您可以使用案例条件:

case when column_2 is not null 
     then concatenate
     else column_1
end

答案 7 :(得分:0)

主持人将我标记为MSSQL的一些帖子重命名为“ SQL”。所以我假设您正在使用MSSQL

COALESCE将返回第一个非空值。

SELECT COALESCE('a', NULL, 'c')

只会返回“ a”

如果要使用“名字+姓氏”,有时一个或另一个为NULL,请使用CONCAT。 Concat将字符串加在一起,并用长度为0的非空值替换NULLS。

 SELECT CONCAT('a', NULL, 'c')

将返回“ ac”

如果您想要Fn空间+中间名空间+ LN,则将CONCONTINATE与CONCAT结合使用:

SELECT CONCAT('a' + ' ', NULL + ' ', 'c')

将返回'a c'。

中间名(null)后的空格用+和NULL消除。

NULL +''为空。

因此,在Middlename或Firstname为null的情况下,您将不会得到多余的空格。