SQL Server 2012多字段合并问题求助(通过Excel查询)
解决Excel查询SQL Server 2012时的字段拼接问题
嘿,我帮你梳理下为啥之前的写法没生效,再给你靠谱的解决方案!
首先得指出你尝试里的几个小坑:
- 你写的
'field1'+'field2'+'field3',这里的单引号会把field1当成字面字符串,而不是字段名,所以结果自然是field1field2field3,而不是字段实际内容,这是核心问题! ||是Oracle、PostgreSQL这类数据库的拼接运算符,但SQL Server 2012不认这个,得用+或者专门的拼接函数。COALESCE函数的作用是返回参数里第一个非NULL的值,不是用来拼接字段的,所以用它肯定得不到你要的结果。
接下来给你两种在SQL Server 2012里绝对能用的拼接方法:
方法1:用+运算符(需手动处理NULL)
如果直接用+拼接,只要有一个字段是NULL,整个结果就会变成NULL,所以最好用ISNULL把NULL转换成空字符串:
ISNULL(field1, '') + ISNULL(field2, '') + ISNULL(field3, '') AS combination
如果需要给字段之间加分隔符(比如下划线),直接插进去就行:
ISNULL(field1, '') + '_' + ISNULL(field2, '') + '_' + ISNULL(field3, '') AS combination
要是字段不是字符串类型(比如int、datetime),得先转成varchar避免报错:
ISNULL(CAST(field_int AS VARCHAR(10)), '') + '_' + ISNULL(field_varchar, '') AS combination
方法2:用CONCAT函数(自动处理NULL)
SQL Server 2012已经支持CONCAT函数了,它会自动把NULL当成空字符串处理,还能自动转换不同数据类型,用法超简单:
CONCAT(field1, field2, field3) AS combination
加分隔符的话直接把分隔符作为参数加进去:
CONCAT(field1, '_', field2, '_', field3) AS combination
举个实际例子,假设你的字段是name(varchar)、age(int)、department(varchar),用CONCAT的话:
CONCAT(name, ' - ', age, '岁 - ', department) AS combination
(这里age不用手动转类型,CONCAT会自动帮你处理,是不是很省心?)
最后再提醒下:写字段名的时候不要加单引号,单引号是用来包裹字符串字面量的;如果字段名有特殊字符(比如空格),才需要用方括号[]包裹,比如[field name with space]。
内容的提问来源于stack exchange,提问作者excelguy
相关产品推荐
相关产品推荐

