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中的"可直接替换为双引号",避免解析混乱;若不需要过滤无效值,可删除WHERE子句。
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

