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
相关产品推荐
相关产品推荐

