sql-将两个数据库列合并为一个结果集列

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

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

当字段之一为null时,整个串联表达式的结果为null。 我该如何克服?

数据库是MS SQL Server2008。顺便说一下,这是连接数据库列的最佳方法吗? 是否有任何标准的SQL这样做?

jilt3d asked 2020-06-22T05:38:54Z
7个解决方案
44 votes

执行此操作的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
Steve Prentice answered 2020-06-22T05:39:13Z
38 votes

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

SELECT CONCAT(field1, field2, field3) FROM table1

NULL字段不会破坏您的串联。

@bummi-感谢您的评论-编辑了我的答案以使其对应。

BornToCode answered 2020-06-22T05:39:43Z
14 votes

NULL的正常行为是任何包含NULL的操作都会产生NULL ...

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

为了克服这个问题,请使用ISNULL或COALESCE将NULL的任何实例替换为其他东西。

SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
MatBailie answered 2020-06-22T05:40:10Z
5 votes

如果您对NULL值有疑问,请使用COALESCE函数将NULL替换为您选择的值。 您的查询将如下所示:

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

[HTTP://呜呜呜.co的project.com/KB/database/data crunching.aspx]

IAmTimCorey answered 2020-06-22T05:40:35Z
4 votes

使用ISNULL克服它。

例:

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

然后,这将用空字符串替换您的NULL内容,这将保留合并操作以免被评估为总体NULL结果。

Brian Scott answered 2020-06-22T05:41:04Z
1 votes

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

只是将列转换为Varchar(大小)

例:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
Pramod Pandav answered 2020-06-22T05:41:32Z
1 votes

只是将列转换为Varchar(大小)

如果两个列都是数字,则使用下面的代码。

例:

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

col3的大小将是40还是其他的多少

raman answered 2020-06-22T05:42:07Z
translate from https://stackoverflow.com:/questions/6427764/concatenate-two-database-columns-into-one-resultset-column