sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)

原创 2015年11月19日 16:57:04

SQL Server 中的 STUFF 函数的使用

STUFF ( character_1 , start , length ,character_2 )
作用:将character_1中自start(SQL中都是从1开始,而非0)起,删除length个长度的字符,然后用character_2替换删掉的字符。
  • character_1:一个字符数据表达式。character_1可以是常量、变量,也可以是字符列或二进制数据列。
  • start:一个整数值,指定删除和插入的开始位置。如果 start或 length 为负,则返回空字符串。如果start比param1长,则返回空字符串。start可以是 bigint 类型。
  • length:一个整数,指定要删除的字符数。如果 length 比character_1长,则最多删除到character_1 中的最后一个字符。length 可以是 bigint 类型。
  • character_2,返回类型。如果character_1是受支持的字符数据类型,则返回字符数据。如果character_1是一个受支持的 binary 数据类型,则返回二进制数据。

实例:select STUFF('abcdefg',2,2,'1234')       --结果为'a1234defg'


SQL Server 中的 for xml path

for xml path有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.

假设有个表存放着学生的兴趣爱好情况():

select * from Tu_User ;
结果如下:


接下来我们来看应用FOR XML PATH的查询结果语句如下:

select FName,FHobby from Tu_User for xml path;

结果如下:

由此可以看出 FOR XML PATH 可以将查询结果根据行输出成XML格式!

SELECT B.FName,B.FHobby FROM (
SELECT FName,
(SELECT FHobby+',' FROM Tu_User 
  WHERE FName=A.FName 
  FOR XML PATH('')) AS FHobby
FROM Tu_User A 
GROUP BY FName
) B 
结果如下:

当然这样是通过子表的方式来查寻得到的结果,在项目中需要查的字段可能是十几个乃至几十个,这时候这样处理就不尽人意了,当然我也是从网上查找到别人的方法借鉴过来的,在这里就分享一下,希望大家看后多多批评指教:
这里呢就是将上述的两者相结合,
SELECT  FName ,STUFF((SELECT FHobby+',' FROM Tu_User 
  WHERE t_u.FName=FName order by FHobby
  FOR XML PATH('')),1,0,'') AS FHobby
FROM Tu_User  as t_u
GROUP BY FName
结果如下:



版权声明:本文为博主原创文章,未经博主允许不得转载。

SQL Server中的STUFF函数的使用

STUFF ( character_expression , start , length ,character_expression ) 参数 character_expression 一个字符数据...

SQL SERVER使用STUFF函数拼接记录为逗号分隔符

stuff(select ',' + fieldname  from tablename for xml path('')),1,1,'') 这一整句的作用是将多行fieldname字段的内容串联起...

SQLServer函数 left()、charindex()、stuff()的使用

1、left() LEFT (, )   返回character_expression 左起 integer_expression 个字符。   [sql] view pl...

SQL Server 中利用STUFF和FOR XML PATH()实现多行数据的拼接

有时候我们可能有将查询的结果

SQL之 Stuff和For xml path

示例 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 ...
  • yhd0916
  • yhd0916
  • 2017年03月08日 16:38
  • 192

Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数

示例表 tb 数据如下 id value ————— 1 aa 1 bb 2 aaa 2 bbb 2 ccc SELECT id, [val] = ( ...

sqlserver中将几条数据合并为一条数据

sqlserver中将几条数据合并为一条数据

合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数

示例表 tb 数据如下 id value ————— 1 aa 1 bb 2 aaa 2 bbb 2 ccc 第一种 SELECT id, [val]=( ...

利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符

T-sql 有一个for xml path('')的从句能把多行结果合并到一行,并成为xml 格式 比如有一张表tb,其格式和数据为: id value ————— 1 aa 1 bb 2 aaa 2...
  • rav009
  • rav009
  • 2016年02月23日 15:35
  • 2382

sql server 使用for xml path 将1列多行转换为字符串连接起来

Sql代码   create table tb ([id] int,[name] varchar(2))   insert into tb   select 1,'aa' union all ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)
举报原因:
原因补充:

(最多只允许输入30个字)