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

SQL中JSON_VALUE提取的日期与日期范围匹配无结果问题咨询

问题原因与解决方案

核心原因

你遇到的问题本质是字符串字典序比较 vs 日期逻辑比较的冲突,具体有两点:

  1. 格式不匹配导致字符串比较失效
    JSON_VALUE返回的是ISO8601格式的字符串:'2023-10-05T22:34:13.7944869+00:00',而你的查询条件用的是'2023-10-05 23:59:59'(空格分隔日期和时间)。字符串比较时会逐字符匹配,T的ASCII码(84)远大于空格(32),所以整个JSON日期字符串会被判定为大于你的结束条件字符串,自然不在BETWEEN范围内。
  2. 毫秒精度的遗漏
    就算格式一致,你的结束条件没有毫秒部分,默认等价于23:59:59.0000000,而JSON日期带有7位毫秒,若你的日期是2023-10-05T23:59:59.1234567+00:00,同样会被判定为大于结束条件。

解决办法

方法1:转换为日期类型比较(推荐)

将JSON中的日期字符串转换为带时区的日期类型(如datetimeoffset),让SQL按日期逻辑处理,同时自动解析时区信息:

WHERE TRY_CONVERT(datetimeoffset, JSON_VALUE(myrow.Value,'$.Date')) >= '2023-10-05 00:00:00'
  AND TRY_CONVERT(datetimeoffset, JSON_VALUE(myrow.Value,'$.Date')) < '2023-10-06 00:00:00'

用< '2023-10-06 00:00:00'代替<= '2023-10-05 23:59:59.9999999',可以彻底避免毫秒精度带来的遗漏问题。

方法2:统一字符串格式

如果坚持用字符串比较,需要让两边格式完全一致(包括时区和毫秒):

WHERE JSON_VALUE(myrow.Value,'$.Date') 
BETWEEN '2023-10-05T00:00:00.0000000+00:00' AND '2023-10-05T23:59:59.9999999+00:00'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:20:59