XQuery: сравнение даты и времени с миллисекундами

У меня есть модуль проверки в Python, который выполняет XQuery для документа XML, чтобы проверить, если таковые имеются <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> время здесь, это работает - но есть ли лучшее решение?

1 ответ

Решение

Предположительно, нет действующей схемы привязки для 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
Другие вопросы по тегам