繁体   English   中英

我们可以在 MarkLogic 的光学 API 查询中使用 DATEADD 函数吗

[英]Can we use DATEADD function in Optic API query in MarkLogic

我正在尝试从视图中获取记录计数,以获取在某些条件下过去 6 个月的列值的日期范围示例计数。 我们可以使用 sql 函数 DATEADD 来获取查询中的日期范围吗?

这是我的光学 API 查询,我在其中尝试使用 DATEADD,它给了我错误:

xquery version "1.0-ml"; 
import module namespace op="http://marklogic.com/optic" at "/MarkLogic/optic.xqy"; 

op:from-view("GTM2_Shipment", "Shipment_View", "") 
=> op:where( op:and(( op:eq(op:col('transMode'), 'Rail') , op:sql-condition("dateadd(month,-6,'BookingCreateDt')") )) ) 
=> op:group-by((), op:count(op:col("Rail_AncillaryCost"), op:col("Ancillary_QuotePrice"))) 
=> op:result()

错误:

OPTIC-INVALARGS: (err:FOER0000) 无效参数:map 参数不是表达式

请让我知道是什么问题。

不需要引用BookingCreateDt的列引用。 即使在 SQL 中您不引用间隔值month ,显然它确实需要引号,以便在解析op:sql-condition表达式时,它知道它是一个字符串文字。

改变你的表达方式:

op:sql-condition("dateadd(month, -6, 'BookingCreateDt'))

至:

op:sql-condition("dateadd('month', -6, BookingCreateDt)

有趣的是,您可以在光学运行时访问各种项目。 已映射 xQuery 库以在计划执行期间使用。

请参阅此处:表达式函数所需的 XQuery 库是您的朋友

对于下面的示例,我以 2 种不同的方式混合了最小和最大日期来显示使用情况。

xquery version "1.0-ml"; 


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";
import module namespace osql="http://marklogic.com/optic/expression/sql"
    at "/MarkLogic/optic/optic-sql.xqy";     

let $three-years-ago  := xs:date(fn:current-date()-xs:yearMonthDuration("P3Y"))
let $plan := op:from-literals(
(
  map:new()=>map:with("name","Freddy Llama")=>map:with("eyeColor", "purple")=>map:with("dateOfBirth", xs:date("2014-12-10")),
  map:new()=>map:with("name", "Sandy Llama")=>map:with("eyeColor", "green")=>map:with("dateOfBirth", xs:date("2010-04-10")),
  map:new()=>map:with("name", "Didi Llama")=>map:with("eyeColor", "black")=>map:with("dateOfBirth", xs:date("2020-06-12"))
  
),
"llamaData")

=>op:where(op:lt(op:view-col("llamaData", "dateOfBirth"), $three-years-ago))
=>op:where(op:gt(op:view-col("llamaData", "dateOfBirth"), osql:dateadd('year',-9, ofn:current-date())))
return $plan=>op:result()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM