You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MarkLogic Optic API的op:where()过滤30天前的时间戳数据

解决MarkLogic Optic API过滤30天内数据的问题

你可以通过两种可行方式实现需求,具体方案如下:

方案一:使用Optic原生算子(推荐)

直接借助Optic提供的日期时间函数构建过滤条件,避开SQL语法兼容问题:

op:where(
  op:gte(
    op:col("MyData.testDateTime"),
    op:subtract-dateTime-dayTimeDuration(
      op:current-dateTime(),
      op:dayTimeDuration("P30D")
    )
  )
)
  • op:current-dateTime():获取当前带时区的完整时间戳
  • op:dayTimeDuration("P30D"):定义30天的时长
  • op:subtract-dateTime-dayTimeDuration:计算出30天前的时间节点
  • op:gte:保留时间戳晚于等于30天前的数据,也就是排除早于30天的行

方案二:使用MarkLogic兼容的SQL条件

如果坚持使用op:sql-condition,需要用MarkLogic SQL支持的标准语法:

op:where(op:sql-condition("MyData.testDateTime >= CURRENT_TIMESTAMP - INTERVAL '30' DAY"))

MarkLogic SQL不支持DATEADD、GETDATE()这类非标准函数,也不认可CURRENT_DATE - 30这种简化写法,必须用INTERVAL '30' DAY来表示时长;同时用CURRENT_TIMESTAMP匹配xs:dateTime类型的字段(如果用CURRENT_DATE会自动补00:00:00的时间部分,也能生效,但CURRENT_TIMESTAMP更精准)。

内容的提问来源于stack exchange,提问作者Mike J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:18:24