xquery按日期排序时间

时间:2011-02-07 07:51:24

标签: datetime sql-order-by xquery

说我的数据库中有以下文件:a_doc1,a_doc2,b_doc1和b_doc2

所有这些文件都具有以下格式

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

&GT;

使用fn:current-dateTime()

创建文档时,将插入“updatedTime”元素的值

现在我正在尝试执行以下操作:

  1. 查找名称以“a _”
  2. 开头的所有文件
  3. 按照<updatedTime>元素的降序排列这些文档
  4. 从降序返回第一个文档名称
  5. 我尝试了以下内容:

    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]。

    谢谢, 索尼

2 个答案:

答案 0 :(得分:0)

你应该使用(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"))

答案 1 :(得分:0)

order by dateTime(doc($doc_name)/updatedTime/text())

而非使用

order by xs:dateTime(doc($doc_name)/updatedTime)