我使用以下SQL将一个表中的几个数据库列连接到结果集中的一列:
SELECT (field1 + '' + field2 + '' + field3) FROM table1
当其中一个字段为null时,我得到整个连接表达式的null结果。我怎么能克服这个?
数据库是MS SQL Server 2008.顺便说一句,这是连接数据库列的最佳方法吗?有没有标准的SQL这样做?
答案 0 :(得分:44)
执行此操作的SQL标准方法是:
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1
示例:
INSERT INTO table1 VALUES ('hello', null, 'world');
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1;
helloworld
答案 1 :(得分:38)
如果您使用的是SQL 2012或更高版本,则可以使用CONCAT功能:
SELECT CONCAT(field1, field2, field3) FROM table1
NULL字段不会破坏您的连接。
@bummi - 感谢您的评论 - 编辑了我的回答以对应它。
答案 2 :(得分:14)
NULL的正常行为是任何包含NULL的操作都会产生NULL ...
- 9 * NULL = NULL
- NULL + '' = NULL
- etc
要克服这个问题,请使用ISNULL或COALESCE将NULL的任何实例替换为其他内容..
SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
答案 3 :(得分:5)
如果您遇到NULL值问题,请使用COALESCE函数将NULL替换为您选择的值。您的查询将如下所示:
SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1
答案 4 :(得分:4)
使用ISNULL克服它。
示例:
SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1
然后,这将用空字符串替换您的NULL内容,这将保持连接操作不会作为整体NULL结果进行评估。
答案 5 :(得分:1)
如果两个列都是数字,则使用此代码
刚刚将列转换为Varchar(大小)
示例:强>
Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
答案 6 :(得分:1)
刚刚将列转换为Varchar(大小)
如果两列都是数字,则使用下面的代码。
示例:
Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
col3
的大小是40或其他什么