我在SQL Server 2008 R2中有一个名为tblFiles的简单表。
tblFiles如下列:
架构如下:
<?xml version="1.0" encoding="UTF-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="FileMetaData">
<xs:complexType>
<xs:sequence>
<xs:element name="CreatedDate" type="xs:time"/>
<xs:element name="ModifiedDate" type="xs:time"/>
<xs:element name="AccessDate" type="xs:time"/>
</xs:sequence>
<xs:attribute name="Length" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>
记录中的示例XML元数据条目是:
<?xml version="1.0"?>
<FileMetaData Length="26">
<CreatedDate>10:13:53.1008</CreatedDate>
<ModifiedDate>10:14:02.0327</ModifiedDate>
<AccessDate>10:13:53.1008</AccessDate>
</FileMetaData>
我使用大量文件及其关联的元数据填充了数据库。
我正在尝试解决的是如何编写一个返回所有记录的查询,这些记录的长度设置在X和Y之间的XML中?
如何在SQL查询中导航XML?
TIA
答案 0 :(得分:3)
我在你的XML上测试了这个:
SELECT MyXmlCol.value('(/FileMetaData/@Length)[1]', 'int')
FROM MyXmlTable
WHERE MyXmlCol.value('(/FileMetaData/@Length)[1]', 'int') BETWEEN 25 AND 30
输出:
26
你必须记住[1]告诉查询获取第一个值。 “@”指定XML属性。你可以在这里查看关于value()函数的文档:
答案 1 :(得分:0)
这是来自内存,所以我的语法可能有点过了。它应该是这样的:
declare @x int
declare @y int
set @x = 10
set @y = 50
select *
from tblFiles
where MetaData.value('(/FileMetaData/@Length)', 'int') between @x and @y
关于这类话题还有很多其他的SO问题: