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