将两个数据库列连接到一个结果集列

时间:2011-06-21 15:21:15

标签: sql sql-server-2008 concatenation

我使用以下SQL将一个表中的几个数据库列连接到结果集中的一列:

SELECT (field1 + '' + field2 + '' + field3) FROM table1

当其中一个字段为null时,我得到整个连接表达式的null结果。我怎么能克服这个?

数据库是MS SQL Server 2008.顺便说一句,这是连接数据库列的最佳方法吗?有没有标准的SQL这样做?

7 个答案:

答案 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

http://www.codeproject.com/KB/database/DataCrunching.aspx

答案 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或其他什么