jil*_*t3d 46 sql concatenation sql-server-2008
我使用以下SQL将一个表中的几个数据库列连接到结果集中的一列:
SELECT (field1 + '' + field2 + '' + field3) FROM table1
当其中一个字段为null时,我得到整个连接表达式的null结果.我怎么能克服这个?
数据库是MS SQL Server 2008.顺便说一下,这是连接数据库列的最佳方法吗?有没有标准的SQL这样做?
Ste*_*ice 44
执行此操作的SQL标准方法是:
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1
Run Code Online (Sandbox Code Playgroud)
例:
INSERT INTO table1 VALUES ('hello', null, 'world');
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1;
helloworld
Run Code Online (Sandbox Code Playgroud)
Bor*_*ode 38
如果您使用的是SQL 2012或更高版本,则可以使用CONCAT函数:
SELECT CONCAT(field1, field2, field3) FROM table1
Run Code Online (Sandbox Code Playgroud)
NULL字段不会破坏您的串联.
@bummi - 感谢您的评论 - 编辑了我的回答以对应它.
Mat*_*lie 14
NULL的正常行为是任何包含NULL的操作都会产生NULL ...
- 9 * NULL = NULL
- NULL + '' = NULL
- etc
Run Code Online (Sandbox Code Playgroud)
要克服这个问题,请使用ISNULL或COALESCE将NULL的任何实例替换为其他内容.
SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
Run Code Online (Sandbox Code Playgroud)
如果您遇到NULL值问题,请使用COALESCE函数将NULL替换为您选择的值.您的查询将如下所示:
SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1
Run Code Online (Sandbox Code Playgroud)
http://www.codeproject.com/KB/database/DataCrunching.aspx