【发布时间】:2012-04-17 05:59:21
【问题描述】:
我在一个带有 XML 数据类型列的 SQL 表中有一些数据,我需要在其中返回一个日期范围内的元素列表。数据如下所示:
文件夹表 - TBL 文件夹: id - GUID ClientId = GUID 创建日期:日期时间 内容:xml
内容 xml 的结构如下:
<Contents>
<Files>
<File id="SOMEGUID">
<StartDate>2001-11-07</StartDate>
<EndDate>2062-11-14</EndDate>
<Type code="jpeg">JPEG</Type>
<Valid>true</Valid>
</File>
<File id="SOMEGUID">
<StartDate>2012-09-01</StartDate>
<EndDate>2065-11-14</EndDate>
<Type code="jpeg">JPEG</Type>
<Valid>true</Valid>
</File>
Files etc......
</Files>
</Contents>
我在一个存储过程中写这个,我传入一个客户端 GUID 和一个开始和结束日期 我正在寻找一个 xml 列,其中包含最新文件夹记录的日期范围之间的所有文件:
这是我目前所拥有的:
Select top 1 folder.contents.query('Contents/File/File
from TBLFolder
where clientID = @clientId
order by CreatedDate desc
For XML PATH ('Files')
过滤 xml 中的 Files 节点以仅显示介于 start 和 end 参数之间的文件的最佳方法是什么? 我是 SQL 中的 XML 新手,所以不确定解决这个问题的最佳方法。
我在查询中尝试了 FLOWER 语句和谓词,但在日期时间和转换方面遇到了问题,我也得到了 p1: p2: 前缀出现在我的元素上。
我想要的输出是:
<Files>
<File id="SOMEGUID">
<StartDate>2001-11-07</StartDate>
<EndDate>2062-11-14</EndDate>
<Type code="jpeg">JPEG</Type>
<Valid>true</Valid>
</File>
<File id="SOMEGUID">
<StartDate>2012-09-01</StartDate>
<EndDate>2065-11-14</EndDate>
<Type code="jpeg">JPEG</Type>
<Valid>true</Valid>
</File>
Files etc......
</Files>
【问题讨论】: