我正在尝试生成一个报告,该报告会获取季度报告,即基于startDate和endDate。如果我将季度名称作为Q1,将年份作为XQuery或Marklogic中的参数,则如何计算任何季度的startDate和endDate。
示例:如果我有Quarter = q1和Year = 2018作为参数,那么我需要将startDate设置为01-01-2018并将endDate设置为31-03-2018
答案 0 :(得分:3)
您可以使用functx:last-day-of-month()
和其他标准日期函数来构造给定年份和季度的开始日期和结束日期。
下面的示例代码将返回xs:date
对象的序列,第一个是开始日期,第二个是结束日期。
xquery version "1.0-ml";
import module namespace functx = "http://www.functx.com"
at "/MarkLogic/functx/functx-1.0-doc-2007-01.xqy";
declare function local:quarter-range($year as xs:integer, $quarter as xs:integer) {
let $month := 3 * $quarter
let $end := xs:date($year || "-"|| substring(string(100 + $month), 2)||"-01")
let $start-date := $end - xs:yearMonthDuration("P2M")
let $end-date := functx:last-day-of-month($end)
return
($start-date, $end-date)
};
local:quarter-range(2018, 2)
您可以对其进行增强,以构造并返回带有cts:and-query()
的{{1}}:
cts:element-range-query