0

0

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

php中文网

php中文网

发布时间:2016-06-07 15:52:00

|

1406人浏览过

|

来源于php中文网

原创

--查询分组号为6的子孙子节点 with RTD1 as(select id ,pid from UserGroup),RTD2 as(select * from RTD1 where id=6union allselect RTD1.* from RTD2 inner join RTD1 on RTD2.id=RTD1.PID)select * from RTD2 --现在想进一步将查询结果转换为逗号分隔的字

--查询分组号为6的子孙子节点

with 
	RTD1 as(
		select id ,pid from UserGroup
	),
	RTD2 as(
		select * from RTD1 where id=6
		union all
		select RTD1.* from RTD2 inner join RTD1 
		on RTD2.id=RTD1.PID
	)
select * from RTD2


--现在想进一步将查询结果转换为逗号分隔的字串

--查询分组号为6的子孙子节点

with 
	RTD1 as(
		select id ,pid from UserGroup
	),
	RTD2 as(
		select * from RTD1 where id=6
		union all
		select RTD1.* from RTD2 inner join RTD1 
		on RTD2.id=RTD1.PID
	)
--select * from RTD2
select ','+cast(id as nvarchar) from RTD2 for xml path('')


查询结果如下:

,6,17,18,20,21,22,23,24,29,25,26,28,27

(13 行受影响)

 

魔匠AI论文
魔匠AI论文

专业原创的AI论文写作工具,一站式解决论文选题、写作、文献综述、答辩PPT全流程,支持毕业论文、课程论文等多种类型,轻松助力高质量论文写作。

下载

 

--现在想进一步去掉左边逗号,同时加上左右圆括号

--查询分组号为6的子孙子节点

with 
	RTD1 as(
		select id ,pid from UserGroup
	),
	RTD2 as(
		select * from RTD1 where id=6
		union all
		select RTD1.* from RTD2 inner join RTD1 
		on RTD2.id=RTD1.PID
	)
select '('+
	STUFF(
		(select ','+cast(id as nvarchar) from RTD2 for xml path('')),1,1,''
	)+
')'


查询结果如下:

(6,17,18,20,21,22,23,24,29,25,26,28,27)

(1 行受影响)

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于以上文章中关于for xml path的用法,我贴出一位朋友的博客如下[对这位朋友表示感谢]:

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

        一.FOR XML PATH 简单介绍

             那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

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

SELECT * FROM @hobby FOR XML PATH

       结果:

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

row>
  
hobbyID>1hobbyID>
  
hName>爬山hName>
row>
row>
  
hobbyID>2hobbyID>
  
hName>游泳hName>
row>
row>
  
hobbyID>3hobbyID>
  
hName>美食hName>
row>

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

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

      那么,如何改变XML行节点的名称呢?代码如下:     

SELECT * FROM @hobby FOR XML PATH('MyHobby')

 

      结果一定也可想而知了吧?没错原来的行节点 变成了我们在PATH后面括号()中,自定义的名称,结果如下:

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

MyHobby>
  
hobbyID>1hobbyID>
  
hName>爬山hName>
MyHobby>
MyHobby>
  
hobbyID>2hobbyID>
  
hName>游泳hName>
MyHobby>
MyHobby>
  
hobbyID>3hobbyID>
  
hName>美食hName>
MyHobby>

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

      这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下:

SELECT hobbyID as 'MyCode',hName as 'MyName' FROM @hobby FOR XML PATH('MyHobby')

 

      那么这个时候我们列的节点名称也会编程我们自定义的名称 结果如下:

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

MyHobby>
  
MyCode>1MyCode>
  
MyName>爬山MyName>
MyHobby>
MyHobby>
  
MyCode>2MyCode>
  
MyName>游泳MyName>
MyHobby>
MyHobby>
  
MyCode>3MyCode>
  
MyName>美食MyName>
MyHobby>

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

    噢! 既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码: 

SELECT ''+hName+' ]' FROM @hobby FOR XML PATH('')

    没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下:

[ 爬山 ][ 游泳 ][ 美食 ]

    那么其他类型的列怎么自定义? 没关系,我们将它们转换成字符串类型就行啦!例如:

SELECT '{'+STR(hobbyID)+'}',''+hName+' ]' FROM @hobby FOR XML PATH('')

    好的 FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档!

    接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。。。。。。

        二.一个应用场景与FOR XML PATH应用

        首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下:

           SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

        这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下:

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

SELECT B.sName,LEFT(StuList,LEN(StuList)-1as hobby FROM (
SELECT sName,
(
SELECT hobby+',' FROM student 
  
WHERE sName=A.sName 
  
FOR XML PATH('')) AS StuList
FROM student A 
GROUP BY sName
) B 

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

         结果如下:SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

 分析: 好的,那么我们来分析一下,首先看这句:

SELECT hobby+',' FROM student 
  
WHERE sName=A.sName 
  
FOR XML PATH('')

这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式!

那么接着看:

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

SELECT B.sName,LEFT(StuList,LEN(StuList)-1as hobby FROM (
SELECT sName,
(
SELECT hobby+',' FROM student 
  
WHERE sName=A.sName 
  
FOR XML PATH('')) AS StuList
FROM student A 
GROUP BY sName
) B  

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为:

SQLSERVER2005 将查询结果转换为字串[接上一篇文章]

可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1as hobby  就是来去掉逗号,并赋予有意义的列明!

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于stuff函数的用法:

删除指定长度的字符串并在指定的起始点插入另一组字符
   STUFF ( character_expression , start , length , character_expression )
   character_expression :操作的字符,
   start:删除和插入的起始点,
   length:删除的长度,
   character_expression :要插入的字符

 

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

9

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

15

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

10

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

2

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

5

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

62

2026.02.03

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

2

2026.02.03

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2

2026.02.03

Python 强化学习与深度Q网络(DQN)
Python 强化学习与深度Q网络(DQN)

本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

2

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号