我有一个变量$yearMonth := "2015-02"
我必须在元素Date as xs:dateTime
上搜索此日期。
我想使用正则表达式来查找具有此日期的所有文件/文档“2015-02- ??”
我在path-range-index
启用了ModifiedInfo/Date
我正在使用以下代码,但收到Invalid cast
错误
let $result := cts:value-match(cts:path-reference("ModifiedInfo/Date"), xs:dateTime("2015-02-??T??:??:??.????"))
我还使用了以下代码并获得相同的错误
let $result := cts:value-match(cts:path-reference("ModifiedInfo/Date"), xs:dateTime(xs:date("2015-02-??"),xs:time("??:??:??.????")))
请帮助:)
答案 0 :(得分:2)
您似乎正在尝试在Path Range索引上使用通配符搜索,该索引具有数据类型xs:dateTime()。
但是,目前MarkLogic不支持此功能。有多种方法可以处理这种情况:
您可以运行此解决方法来支持现有系统:
为cts中的$ x:值(cts:path-reference(" ModifiedInfo / Date")) 返回if(开头 - (xs:string($ x),' 2015-02'))然后$ x else()
此查询将从词典中提取值,然后您可以过滤所需的日期。
答案 1 :(得分:2)
你可以通过在和查询中组合一对cts:element-range-querys来解决这个问题:
let $target := "2015-02"
let $low := xs:date($target || "-01")
let $high := $low + xs:yearMonthDuration("P1M")
return
cts:search(
fn:doc(),
cts:and-query((
cts:element-range-query("country", ">=", $low),
cts:element-range-query("country", "<", $high)
))
)
来自cts:element-range-query documentation:
如果要约束一系列值,可以将多个cts:element-range-query构造函数与cts:and-query或任何其他可组合cts:query构造函数组合在一起,如同最后一部分一样。以下示例。
答案 2 :(得分:0)
你也可以考虑做一个cts:带有cts:query的值,用于搜索例如2015-02-01和2015-03-01之间的值。但请注意,如果一个文档中出现多个日期,则需要手动过滤后(例如Navin的选项3),但它可能会加快后过滤的速度..
HTH!