【问题标题】:XQuery: comparing datetimes with millisecondsXQuery:将日期时间与毫秒进行比较
【发布时间】:2015-01-28 20:37:30
【问题描述】:

我在 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。 如果我在这里为&lt;Start&gt; 时间添加一个小数位,它可以工作——但是有没有更好的解决方案?

【问题讨论】:

    标签: python xpath xquery berkeley-db-xml


    【解决方案1】:

    推测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
    

    【讨论】:

    • Gunther == 绅士 + 学者,先生,这就解决了!但是,我改成xs:dateTime大写T :)
    • 谢谢。没错,xs:dateTime 中有一个大写的T ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多