SQL SERVER使用STUFF函数拼接

stuff(select ',' + fieldname  from tablename for xml path('')),1,1,'')
这一整句的作用是将多行fieldname字段的内容串联起来,用逗号分隔。
例如表
fieldname
-----------
AAA
BBB
CCC
串联之后就是字符串: AAA,BBB,CCC
for xml path是SQL Server 2005以后版本支持的一种生成XML的方式。具体如何使用,请参考联机丛书。

stuff函数的作用是去掉字符串最前面的逗号分隔符。

用法:

select *,stuff(select ',' + fieldname from table1 for xml path('')),1,1,'')  as  field from table2





STUFF ( character_expression , start , length ,character_expression ) 
参数

 
character_expression 
一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列。

start 
一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个character_expression 长,则返回空字符串。start 可以是 bigint 类型。

length 
一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个character_expression 中的最后一个字符。length 可以是 bigint 类型。

返回类型 
如果 character_expression 是受支持的字符数据类型,则返回字符数据。如果 character_expression 是一个受支持的 binary 数据类型,则返回二进制数据。


备注 
如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。
 
如果结果值大于返回类型支持的最大值,则产生错误。


示例 
以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。

SELECT STUFF('abcdef', 2, 3, 'ijklmn'); 
GO

下面是结果集: 
--------- 
aijklmnef

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`STUFF` 函数用于将一个字符串插入到另一个字符串中的指定位置,并删除原始字符串中指定长度的字符。在使用 `FOR XML` 时,`STUFF` 函数常用于将多个行合并为单个 XML 字符串。 以下是一个使用 `STUFF` 函数拼接字段的例子: 假设有一个 `Orders` 表,包含 `OrderID` 和 `Product` 两个字段,如下所示: | OrderID | Product | |---------|---------| | 1 | Apple | | 1 | Banana | | 1 | Orange | | 2 | Pear | | 2 | Cherry | 我们可以使用以下 T-SQL 语句将每个 `OrderID` 的 `Product` 字段合并为一个 XML 字符串: ```sql SELECT OrderID, STUFF((SELECT ',' + Product FROM Orders o2 WHERE o2.OrderID = o1.OrderID FOR XML PATH('')), 1, 1, '') AS Products FROM Orders o1 GROUP BY OrderID ``` 执行上述语句后,得到的结果如下所示: | OrderID | Products | |---------|----------------------| | 1 | Apple,Banana,Orange | | 2 | Pear,Cherry | 其中,`STUFF` 函数的第一个参数是要进行操作的字符串,第二个参数是要删除的起始位置,第三个参数是要删除的字符数,第四个参数是要插入的字符串。在这个例子中,第一个参数是 `(SELECT ',' + Product FROM Orders o2 WHERE o2.OrderID = o1.OrderID FOR XML PATH(''))`,它将每个 `OrderID` 的 `Product` 字段按照逗号进行拼接,并使用 `FOR XML PATH('')` 将结果转换为 XML 字符串。第二个参数是 `1`,表示从字符串的第一个字符开始删除。第三个参数是 `1`,表示删除一个字符(也就是逗号)。第四个参数是 `''`,表示插入一个空字符串。最终得到的结果是将每个 `OrderID` 的 `Product` 字段拼接成一个逗号分隔的字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值