XQuery:将日期时间与毫秒进行比较

2024-06-20 15:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中有一个验证模块,它对XML文档执行一个XQuery,检查是否有<Start>次在<End>次之后,并返回它们的计数。查询如下:

    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>

这总是返回True,即使很明显14小于14.22。 如果我在<Start>时间上加上一个小数位,它是有效的——但是有更好的解决方案吗?你知道吗


Tags: 模块in文档forcount时间xmlstart
1条回答
网友
1楼 · 发布于 2024-06-20 15:03:14

假定StartEnd元素没有有效的模式绑定。在这种情况下,查询正在执行xs:untypedAtomic比较,它有效地比较字符串值,其中"Z"比较大于"."。你知道吗

您需要的是xs:dateTime比较,因此您应该在将元素值强制转换为该类型之后比较它们。因此,查询应该如下所示:

    for $d at $count in ./ty:Detections/Detection
    where xs:dateTime($d/Start) > xs:dateTime($d/End)
    return $count

相关问题 更多 >