Column1 Column2
------- -------
apple juice
water melon
banana
red berry
我有一个有两列的表。 Column1有一组单词,Column2也有一组单词。我想用+运算符连接它们而没有空格。
例如:applejuice
问题是,如果第二列中有空值,我只想将第一个元素作为结果。
例如:banana
Result
------
applejuice
watermelon
banana
redberry
但是,当我使用column1 + column2时,如果Comunm2为NULL,则它给出NULL值。我希望结果是“香蕉”。
答案 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, '')
答案 4 :(得分:0)
标准SQL要求涉及NULL的字符串连接生成NULL输出,但这是使用||
操作编写的:
SELECT a || b
FROM SomeTable;
如果a
或b
或两者都包含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的情况下,您将不会得到多余的空格。