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

