我在一个带有XML数据类型列的SQL表中有一些数据,我需要返回一个属于日期范围的元素列表。数据如下所示:
文件夹表 - TBL文件夹: id - GUID ClientId = GUID CreatedDate:DateTime 内容: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新手,因此不确定解决这个问题的最佳方法。
我已经尝试了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>
答案 0 :(得分:1)
DECLARE @x XML
SET @x='<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>2001-11-08</StartDate>
<EndDate>2065-11-14</EndDate>
<Type code="jpeg">JPEG</Type>
<Valid>true</Valid>
</File>
<File id="SOMEGUID">
<StartDate>2001-11-19</StartDate>
<EndDate>2065-11-14</EndDate>
<Type code="jpeg">JPEG</Type>
<Valid>true</Valid>
</File>
</Files>'
edited...
SELECT @x.query('
for $i in /Files/File
where $i/StartDate < ''2001-11-19''
return $i
') as Resu
将产生: