1 使用详解
1.1 STUFF()
说明:拼接字符串,同时可以去掉指定位置指定长度的字符串。
语法:
STUFF(character_expression , start , length , character_expression)
参数:
(1)character_expression 由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。可以嵌套字符串函数。
(2)start是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。
(3)length是一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。
(4)返回类型。如果 character_expression 是一个支持的字符数据类型,则返回字符数据。如果 character_expression 是一个支持的 binary 数据类型,则返回二进制数据。
注:
(1)STUFF()函数的拼接顺序为第二个character_expression参数在前,第一个character_expression参数在后。
(2)start参数从1开始,因为在SQL Server中都是从1开始,而非从0开始。
1.2 FOR XML PATH()
说明:可以将查询结果根据行输出成XML格式。
语法:
FOR XML PATH('')
注:
(1)FOR XML PATH()函数一般要以小括号包含才能转换为字符串。
2 将字段拼接成字符串
如果只是简单的将两个字段拼接在一起,有STUFF()函数和+号两种方法。
将users表的username字段和password字段拼接成一列用@符号分隔。
-- +号拼接
SELECT username+'@'+password
FROM users;
-- STUFF()拼接
SELECT STUFF(username,1,0,password+'@')
FROM users;
但是如果碰到需要将表格的某一字段的值拼接成字符串时,就需要同时使用STUFF()函数和FOR XML PATH()函数才可以实现。
拼接users表的username(用户名)字段,用逗号分隔。
SELECT STUFF( (SELECT ','+username FROM users FOR XML PATH('')),1,1,'');