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

SQL Server解析嵌套JSON并查询AEDAT字段MAX最大值方法

你遇到的报错是因为直接将OPENJSON返回的整行JSON对象字符串转换为int类型,没有提前提取出AEDAT字段导致的,可参考以下代码实现需求:

DECLARE @json nvarchar(max)
SET @json = '{"value": [
    {
        "AEDAT": "20211119",
        "ERDAT": "20211119"
    },
    {
        "AEDAT": "20211119",
        "ERDAT": "20211112"
    },
    {
        "AEDAT": "20211123",
        "ERDAT": "20211123"
    },
    {
        "AEDAT": "00000000",
        "ERDAT": "20211119"
    },
    {
        "AEDAT": "00000000",
        "ERDAT": "20211123"
    }]}'

-- 提取AEDAT最大值(含过滤无效默认值)
SELECT MAX(TRY_CAST(AEDAT AS INT)) AS MAX_AEDAT
FROM OPENJSON(@json, '$.value')
WITH (
    AEDAT VARCHAR(8) '$.AEDAT'
)
WHERE AEDAT <> '00000000'

代码逻辑说明:

  • OPENJSON第二个参数'$.value'可直接定位到需要解析的数组节点,无需额外处理外层结构
  • WITH子句用于将JSON对象的属性映射为SQL可直接查询的字段,这里直接取出AEDAT字段的值
  • TRY_CAST会尝试将字符串格式的AEDAT转为int类型,遇到格式错误时返回NULL而非中断执行
  • WHERE语句过滤掉无效的00000000默认值,再通过MAX聚合得到最大值

如果你的示例中预期结果为20211119是业务侧需要排除20211123这类值,直接在WHERE条件中追加对应的过滤规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:04