XQuery:将日期时间与毫秒进行比较
XQuery: comparing datetimes with milliseconds
我在 Python 中有一个验证模块,它在 XML 文档上执行 XQuery,以检查 <End>
次之后是否有任何 <Start>
次,并且 return 他们的数量。查询如下:
for $d at $count in ./ty:Detections/Detection
where $d/Start > $d/End
return $count
现在这适用于所有情况,除非将毫秒附加到结束时间但而不是开始时间,例如:
<Start>2009-02-23T02:53:14Z</Start>
<End>2009-02-23T02:53:14.226Z</End>
这总是 return 正确,即使显然 14 小于 14.22。
如果我在此处的 <Start>
时间中添加一个小数位,它可以工作——但是有没有更好的解决方案?
据推测,Start
和 End
元素没有有效的架构绑定。在那种情况下,查询正在执行 xs:untypedAtomic 比较,它有效地比较字符串值,其中 "Z"
比较大于 "."
.
您想要的是 xs:dateTime 比较,因此您应该在将元素值转换为该类型后比较它们。因此查询应该如下所示:
for $d at $count in ./ty:Detections/Detection
where xs:dateTime($d/Start) > xs:dateTime($d/End)
return $count
我在 Python 中有一个验证模块,它在 XML 文档上执行 XQuery,以检查 <End>
次之后是否有任何 <Start>
次,并且 return 他们的数量。查询如下:
for $d at $count in ./ty:Detections/Detection
where $d/Start > $d/End
return $count
现在这适用于所有情况,除非将毫秒附加到结束时间但而不是开始时间,例如:
<Start>2009-02-23T02:53:14Z</Start>
<End>2009-02-23T02:53:14.226Z</End>
这总是 return 正确,即使显然 14 小于 14.22。
如果我在此处的 <Start>
时间中添加一个小数位,它可以工作——但是有没有更好的解决方案?
据推测,Start
和 End
元素没有有效的架构绑定。在那种情况下,查询正在执行 xs:untypedAtomic 比较,它有效地比较字符串值,其中 "Z"
比较大于 "."
.
您想要的是 xs:dateTime 比较,因此您应该在将元素值转换为该类型后比较它们。因此查询应该如下所示:
for $d at $count in ./ty:Detections/Detection
where xs:dateTime($d/Start) > xs:dateTime($d/End)
return $count