xquery порядок по дате Время - PullRequest
       16

xquery порядок по дате Время

1 голос
/ 07 февраля 2011

Скажите, что в моей базе данных есть следующие документы: a_doc1, a_doc2, b_doc1 и b_doc2

Все эти документы имеют следующий формат

<doc>
  ....
  <updatedTime>2011-02-07T14:41:02.133-05:00</updatedTime>
  ....
</doc

>

Значение элемента "updatedTime" вставляется при создании документа с использованием функции fn: current-dateTime ()

Теперь я пытаюсь сделать следующее:

  1. найтивсе документы, чье имя начинается с "a _"
  2. , упорядочивают эти документы по их элементу <updatedTime> в порядке убывания
  3. Возвращают имя первого документа по убыванию

Я попробовал следующее:

for $doc_name in db:list()
  where fn:starts-with($doc_name, 'a_')
    order by xs:dateTime(doc($doc_name)/updatedTime) descending
      return $doc_name

Скажем, "a_doc1" создан в "2011-02-07T14: 40: 00.78-05: 00" , а "a_doc2" создан в "2011-02-07T14: 41: 02.133-05: 00" , желаемый вывод - a_doc2 .Короче говоря, должно быть возвращено имя документа (начиная с a_) самого последнего созданного документа .

Когда я пробую свой пример кода, возвращаемое значение: [a_doc1, a_doc2].Ожидаемый результат: [a_doc2, a_doc1].

Спасибо, Sony

Ответы [ 2 ]

0 голосов
/ 07 февраля 2011
order by dateTime(doc($doc_name)/updatedTime/text())

Вместо этого используйте :

order by xs:dateTime(doc($doc_name)/updatedTime)
0 голосов
/ 07 февраля 2011

вы должны использовать (xs: http://www.w3.org/2001/XMLSchema):

xs:dateTime($arg as xs:anyAtomicType?) as xs:dateTime?

Example:
xs:dateTime("1999-12-31T12:00:00")

вместо (fn: http://www.w3.org/2005/xpath-functions)

fn:dateTime($arg1 as xs:date?, $arg2 as xs:time?) as xs:dateTime?

Example:
fn:dateTime(xs:date("1999-12-31"), xs:time("12:00:00"))
...