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> здесь, это сработает, но есть ли лучшее решение?


person tenwest    schedule 28.01.2015    source источник


Ответы (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
person Gunther    schedule 28.01.2015
comment
Гюнтер == джентльмен + ученый, это решает, сэр! однако я изменился на xs:dateTime заглавную букву T :) - person tenwest; 29.01.2015
comment
Спасибо. Правильно, в xs:dateTime есть заглавная T ;-) - person Gunther; 29.01.2015