XQuery:检查日期的最快方法

时间:2012-12-25 09:19:43

标签: xml date xquery exist-db

根据我有这个XML文件的事实:

<entries>
  <entry date="2012-10-09T12:09:09">...</entry>
  <entry date="2012-10-09T14:19:23">...</entry>
  ...
  <entry date="2012-10-13T00:00:00">...</entry>
</entries>

$dateBegin := '2012-10-09T13:00:00'$dateEnd := '2012-10-12T00:00:00'。我正在寻找一种有效的方法来获取$ dateBegin和$ dateEnd之间的条目,任何想法?

3 个答案:

答案 0 :(得分:1)

使用Rob(OP)确认的事实,entry元素显示在XML文档中排序,这可能更快

for $dateBegin in xs:dateTime('2012-10-09T13:00:00'),
    $dateEnd in xs:dateTime('2012-10-12T00:00:00')
    return
            /*/*[xs:dateTime(@date) ge $dateBegin
               and
                . << /*/*[xs:dateTime(@date) gt $dateEnd][1]
                ]

根据提供的XML文档评估此XQuery时:

<entries>
  <entry date="2012-10-09T12:09:09">...</entry>
  <entry date="2012-10-09T14:19:23">...</entry>
  ...
  <entry date="2012-10-13T00:00:00">...</entry>
</entries>

产生了想要的正确结果:

<entry date="2012-10-09T14:19:23">...</entry>

答案 1 :(得分:0)

好的,最后我意识到let $entries := //entry[(xs:dateTime(./@date/string()) ge $dateBegin) and (xs:dateTime(./@date/string()) le $dateEnd)]有效。仍然想知道是否存在更好的解决方案。

答案 2 :(得分:0)

您是否为集合定义的entry / @ date属性有一个范围索引?如果不是,我相信这会加快查询速度。