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

MariaDB如何查询JSON结构中任意指定路径日期是否在两日期区间

解决MariaDB中JSON对象多路径日期区间匹配问题

问题分析

你当前使用JSON_VALUE的方式只会返回匹配路径的第一个值,无法检测到后续符合条件的日期。要实现任意一个路径下的日期落在区间内即可匹配,需要先将JSON对象中的所有目标日期展开为行数据,再进行条件判断。

解决方案

使用JSON_TABLE函数将call_dates下的所有next日期提取为独立行,再通过EXISTS子查询判断是否存在符合区间条件的日期:

SELECT *
FROM company_customers cc
WHERE EXISTS (
    SELECT 1
    FROM JSON_TABLE(
        cc.data,
        '$.call_dates.*' COLUMNS (
            next_date DATE PATH '$.next' FORMAT JSON
        )
    ) AS jt
    WHERE jt.next_date BETWEEN STR_TO_DATE('2024/06/10', '%Y/%m/%d') AND STR_TO_DATE('2024/06/20', '%Y/%m/%d')
);

代码说明

  • JSON_TABLE:将call_dates下的每个子对象拆分为独立行,提取next字段并转换为DATE类型(FORMAT JSON确保日期格式被正确解析)。
  • STR_TO_DATE:把字符串格式的日期转换为MariaDB可识别的DATE类型,避免字符串比较可能出现的格式逻辑错误。
  • EXISTS:只要子查询中存在任意一行符合日期区间条件,主查询就会返回对应的记录。

示例数据适配

针对你提供的示例JSON数据,其中2024/06/14落在指定区间内,这条记录会被成功匹配返回。

内容的提问来源于stack exchange,提问作者Jason Stockton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:03:16