簡體   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