sql 查询 XML

c_h_e_n_w_e_i 2010-04-07 11:52:56
有一个XML

<Person>
<Node>
<Name>admin</Name>
<Date>2010-4-6</Date>
</Node>
<Node>
<Name>lisi</Name>
<Date>2010-4-6</Date>
</Node>
<Node>
<Name>wangwu</Name>
<Date>2010-4-7</Date>
</Node>
</Person>


实现
显示:第一个姓名:admin 第2个姓名:lisi 最后一个姓名:wangu
只显示一行
sql语句怎么写 谢谢各位!!!
在线等~~~~
...全文
85 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸运的意外 2010-04-07
  • 打赏
  • 举报
回复
首节点或左后一个节点可以用xPath语法进行选择.分别是函数first(),last()具体的可以看看w3c标准的说明.
中国风 2010-04-07
  • 打赏
  • 举报
回复
中国风 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 c_h_e_n_w_e_i 的回复:]

问一下 htl258 获取最后一个节点 怎么写?
A.x.value('(Node/Name)[3]','varchar(10)') Name3
??
[/Quote]

--last()
SELECT
A.x.value('(Node/Name)[last()]','varchar(10)') Name1
FROM @xml.nodes('Person') AS A(x)

c_h_e_n_w_e_i 2010-04-07
  • 打赏
  • 举报
回复
挺感谢 上面那位( htl258)朋友的!

谢谢,谢谢你们!
c_h_e_n_w_e_i 2010-04-07
  • 打赏
  • 举报
回复
最后一个
A.x.value('(Node/Name)[last()]','varchar(10)') Name3
有空得看看xPath
  • 打赏
  • 举报
回复
不会。。 我保存的时候用过XML
c_h_e_n_w_e_i 2010-04-07
  • 打赏
  • 举报
回复
问一下 htl258 获取最后一个节点 怎么写?
A.x.value('(Node/Name)[3]','varchar(10)') Name3
??
htl258_Tony 2010-04-07
  • 打赏
  • 举报
回复
declare @xml xml
set @xml='
<Person>
<Node>
<Name>admin</Name>
<Date>2010-4-6</Date>
</Node>
<Node>
<Name>lisi</Name>
<Date>2010-4-6</Date>
</Node>
<Node>
<Name>wangwu</Name>
<Date>2010-4-7</Date>
</Node>
</Person>'


SELECT
A.x.value('(Node/Name)[1]','varchar(10)') Name1,
A.x.value('(Node/Name)[2]','varchar(10)') Name2,
A.x.value('(Node/Name)[3]','varchar(10)') Name3
FROM @xml.nodes('Person') AS A(x)

/*
Name1 Name2 Name3
---------- ---------- ----------
admin lisi wangwu

(1 行受影响)
*/
还是要这样的结果?
htl258_Tony 2010-04-07
  • 打赏
  • 举报
回复
htl258_Tony 2010-04-07
  • 打赏
  • 举报
回复
declare @xml xml
set @xml='
<Person>
<Node>
<Name>admin</Name>
<Date>2010-4-6</Date>
</Node>
<Node>
<Name>lisi</Name>
<Date>2010-4-6</Date>
</Node>
<Node>
<Name>wangwu</Name>
<Date>2010-4-7</Date>
</Node>
</Person>'

;with t as
(
SELECT
A.x.value('Name[1]','varchar(10)') Name
FROM @xml.nodes('//Node') AS A(x)
)
select STUFF((select ','+name from t for xml path('')),1,1,'')
/*
admin,lisi,wangwu

(1 行受影响)
*/
c_h_e_n_w_e_i 2010-04-07
  • 打赏
  • 举报
回复
非常感谢!谢谢你们
dawugui 2010-04-07
  • 打赏
  • 举报
回复
不会,帮顶.
前次提供的那个连接有用吗?
c_h_e_n_w_e_i 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 roy_88 的回复:]
樓主參照一下

XML常用方法
http://topic.csdn.net/u/20090813/17/06951cf3-cd2c-4509-ac0b-9b3bed28ea57.html
[/Quote]

谢谢这位朋友! 要好好学习下

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧