将两个数据库列连接成一个结果集列
我使用以下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
使用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