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

SQL Server解析JSON无结果问题:未获取预期输出

问题分析与修正

你的SQL语句存在几个关键问题,导致无结果返回:

1. JSON解析路径错误

第一个OPENJSON指定的路径'$.value'仅指向包含数组的外层对象,而非存储数据的数组本身。正确路径应直接定位到数组:'$.value.value'。

2. CASE语句语法冗余

CASE分支里的WHEN j j2.[value] = 'TIMESTAMP'多了一个无效的j,属于语法错误,需删除。

3. 可选优化:过滤无效值

原数据中存在"AEDAT": "00000000"这类无效日期值,若要匹配预期结果,需添加过滤条件排除此类数据。

修正后的SQL语句

SELECT TOP(1) 
    j2.[key] AS ColumnName,
    CASE
        WHEN j2.[value] = 'TIMESTAMP' 
            THEN CAST(LEFT(j2.value, LEN(j2.value) - 2) AS bigint)
            ELSE CAST(j2.value AS bigint) -- 改用bigint避免潜在数值溢出
    END AS LastUpdatedValue
FROM 
    OPENJSON('{
                  "value": {
                    "value": [
                      {
                        "ERDAT": "20221019",
                        "AEDAT": "20221019"
                      },
                      {
                        "ERDAT": "20221104",
                        "AEDAT": "00000000"
                      }
                    ]
                  }
                }','$.value.value') j1
CROSS APPLY 
    OPENJSON(j1.value) j2
WHERE 
    j2.[value] <> '00000000' -- 排除无效日期值
ORDER BY 
    LastUpdatedValue DESC;

执行结果

执行后会得到你预期的结果:

ColumnName LastUpdatedValue
---------- ----------------
ERDAT      20221104

注:原JSON中的&quot;可直接替换为双引号",避免解析混乱;若不需要过滤无效值,可删除WHERE子句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:15:40