我们通常需要获取一个多行的某个字段拼出的字符串,我们可以使用for xml path进行处理;下面将介绍for xml path的具体用法;

创建测试表&插入测试数据

在数据库中新增测试表

CREATE TABLE MyTest(
UserName VARCHAR(50),
Email VARCHAR(100)
)

插入测试数据

INSERT INTO MyTest
( UserName, Email )
VALUES ( '张三', -- UserName - varchar(50)
'zhangsan@163.com' -- Email - varchar(100)
)
INSERT INTO MyTest
( UserName, Email )
VALUES ( '李四', -- UserName - varchar(50)
'lisi@163.com' -- Email - varchar(100)
)

数据库有如下两条数据

for xml path使用

普通用法

创建根节点为user的xml

SELECT UserName ,
Email FROM MyTest FOR XML PATH('User')

运行结果:

<User>
<UserName>张三</UserName>
<Email>zhangsan@163.com</Email>
</User>
<User>
<UserName>李四</UserName>
<Email>lisi@163.com</Email>
</User>

自定义节点名称

给对应的字段取别名即可,如下将UserName取别名为MyUser

SELECT UserName AS MyUser ,
Email FROM MyTest FOR XML PATH('User')

运行结果

<User>
<MyUser>张三</MyUser>
<Email>zhangsan@163.com</Email>
</User>
<User>
<MyUser>李四</MyUser>
<Email>lisi@163.com</Email>
</User>

将字段作为xml的属性

可在查询时 别名用 as '@..' 如'@value'

SELECT UserName AS '@UserName' ,
Email AS '@Email' FROM MyTest FOR XML PATH('User')

运行结果

<User UserName="张三" Email="zhangsan@163.com" />
<User UserName="李四" Email="lisi@163.com" />

行转列拼接字符串

如将所有姓名拼接为,隔开的字符串

SELECT UserName+',' FROM MyTest FOR XML PATH('')

结果

张三,李四,

这里多了一个,需要再次加工处理一下,通过处理字符串将最后一个逗号去掉即可,可通过SQL中的left函数处理,这里不做介绍;

具体用法可参考我的另一篇文章----SQL Server 中截取字符串常用的函数

SQLServer中sql for xml path 的用法的更多相关文章

  1. 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器

    1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...

  2. sql分组合并字段重复项sql for xml path

    -------------------------(情景描述) 在我们处理数据时,可能会碰到这种情景: Id                Name 1                  a,b 2  ...

  3. sql for xml path 处理

    1.将下列结果集 做成 aa   语文,数学 bb    英语,语文 这种格式 使用 for xml  path  记得去重复 WITH cte AS(SELECT stu.studentname,c ...

  4. Sql server—— for xml path简单用法(可以按照分组把相同组的列中的不同的值,像字符串一样拼接在一起显示在分组之后的列中。)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI8AAACWCAIAAABo2EyXAAAKeklEQVR4nO2dy27rNh7G+U7CFIrfZX

  5. SQL FOR XML PATH 用法

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

  6. SQL FOR XML PATH 和 Stuff 用法

    sql stuff 用法 1.作用 删除指定长度的字符,并在指定的起点处插入另一组字符. 2.语法 STUFF ( character_expression , start , length ,cha ...

  7. sql中的for xml path() 实现字符串拼接

       通常我们需要在sql中拼接字符串   ,可以用for xml path() 来进行拼接,如下实例. 同时未去掉最后一个逗号可以用LEFT函数来实现.     ) AS UserName  FRO ...

  8. 转王波洋,SQL语句中的 for XML Path('')

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

  9. sql for xml path用法

    一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看 ...

随机推荐

  1. 学习笔记10—Python 绘图集

    ordered_data = np.load('ordered_data_just_TD_mae.npy')results = pd.Series(np.squeeze(np.load('result ...

  2. 为HTML表格添加交互功能------DataTables

    DataTables是一个功能强大的Javascript库,用于为HTML表格添加交互功能,虽然简单性是整个项目的核心设计原则,但入门看起来相当艰巨.但是,采取这些第一步并在您的网站上运行DataTa ...

  3. mint 安装过程

    这几天因为各种原因装系统(自己因为双屏不能旋转,输入法界面始终矬,重装2次(应该都是更新内核和更新时包依赖不对的锅,以后屏蔽内核更新和linux-libc-dev这样的更新,要么就新版本出来重装),和 ...

  4. JavaWeb知识点总结

    >一: 创建Web项目项目说明:1.java Resources:java源文件2.WebContent:网页内容html.css.js.jsp.资源.配置文件等 HTML:Hyper Text ...

  5. angular2 脏检查机制

    https://www.waitig.com/angular2-%E8%84%8F%E6%A3%80%E6%9F%A5%E8%BF%87%E7%A8%8B.html https://zhuanlan. ...

  6. 如何解决failed to load the jni shared library问题

    如何解决failed to load the jni shared library问题  首先,我们来查看JDK是多少位的,在搜索框中输入cmd,然后打开命令行窗口.  在命令行中输入java -ve ...

  7. 反转链表 Reverse Linked List

    2018-09-11 22:58:29 一.Reverse Linked List 问题描述: 问题求解: 解法一:Iteratively,不断执行插入操作. public ListNode reve ...

  8. springboot外置的Servlet容器

    嵌入式Servlet容器:应用打成可执行的jar ​ 优点:简单.便携: ​ 缺点:默认不支持JSP.优化定制比较复杂(使用定制器[ServerProperties.自定义EmbeddedServle ...

  9. Abstract Class 一些要点

    抽象类不能使用new operator创建实例. 抽象方法无需实现即可定义.其实现由子类完成. 包含抽象方法的类必须被定义成抽象的. 抽象类的构造函数可以定义成protected,因为它只会被子类使用 ...

  10. SWUST OJ (943)

    顺序表插入操作的实现 #include<stdio.h> #include <stdlib.h> void InitList(int *&l, int n) { l = ...