使用 Optic Query 从当前日期减去 6 个月的日期

问题描述 投票:0回答:1

我正在尝试使用 MarkLogic 中的光学查询根据日期字段(预订创建日期)获取列值的最后 6 个月计数。

通过以下查询,我可以在预订日期小于当前日期时获取记录数。 我需要做的是获取我的预订日期中距当前日期 6 个月前的日期,并计算该日期之后的记录。我在 xquery 中成功创建了相同的内容。

但是我无法在光学查询中从当前日期中减去 6 个月前的日期。 你能帮忙吗?

这是我正在使用的光学查询:

import module namespace op="http://marklogic.com/optic" at "/MarkLogic/optic.xqy";
import module namespace ofn="http://marklogic.com/optic/expression/fn" at "/MarkLogic/optic/optic-fn.xqy";
declare option xdmp:mapping "false";
op:from-view("GTM2_Shipment", "Shipment_View")
=> op:where(op:and((
                   op:eq(op:col("transMode"), 'Road'),op:gt(op:col("Ancillary_QuotePrice"), 0),op:lt(ofn:format-dateTime(op:col('BookingCreateDt'), '[Y0001]-[M01]-[D01]'),ofn:format-dateTime(fn:current-dateTime(),'[Y0001]-[M01]-[D01]'))

                   ))
                   )
=> op:group-by("transMode", op:count("QuotePrice", "Ancillary_QuotePrice"))
=> op:result()
xquery marklogic marklogic-optic-api
1个回答
0
投票

您可以从 xs:yearMonthDuration("P6M")

 中减去 
fn:current-dateTime()

fn:current-dateTime() - xs:yearMonthDuration("P6M")

此外,您当前正在比较格式化日期时间的字符串值的大于和小于。虽然它们确实按字典顺序排序为字符串,但比较日期时间值更容易。

=> op:where(
     op:and((
       op:eq(op:col("transMode"), 'Road'),
       op:gt(op:col("Ancillary_QuotePrice"), 0),
       op:lt(op:col('BookingCreateDt'), fn:current-dateTime() - xs:yearMonthDuration("P6M"))
     ))
   )
© www.soinside.com 2019 - 2024. All rights reserved.