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

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

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

当其中一个字段为空时,我得到了整个连接expression式的空结果。 我怎样才能克服呢?

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

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 

如果您使用的是SQL 2012或更高版本,则可以使用CONCAT函数:

 SELECT CONCAT(field1, field2, field3) FROM table1 

NULL字段不会破坏你的连接。

@bummi – 感谢评论 – 编辑我的答案,以符合它。

正常行为与NULL是任何操作,包括一个NULL产生一个NULL …

 - 9 * NULL = NULL - NULL + '' = NULL - etc 

为了克服这个问题,使用ISNULL或COALESCE来replace任何NULL的实例。

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

如果您的NULL值有问题,请使用COALESCE函数将NULLreplace为您select的值。 您的查询将如下所示:

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

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

使用ISNULL来克服它。

例:

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

然后这将用一个空stringreplace你的NULL内容,这将保持concatentation操作从一个整体NULL结果的评估。

如果两个列都是数字,则使用此代码

只需投出列作为Varchar(大小)

例:

 Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table