我有一个在这里显示的SON,存储在SQL服务器表的一列中:

{
  "Name": "oxygen",
  "StartDate": "2018-06-05",
  "EndDate": "2018-06-22",
  "Desc": {
    "quality": "better",
    "level,amount": "Scheduled",
    "05": "carbon",
    "GDP": "Max",
    "CDF": "ZENE 1",
    "OTBC": "REMO - MIXED UNIQUE"
  }
}

如何使用T-SQL查询查找第5个密钥对值?

我try 过这个:

select JSON_QUERY(column_value,'$.Desc[5]') AS 'result' 
from table_name

select JSON_VALUE([column_value],'$.Desc[5]') as'result' 
from table_name

预期结果为"CDF": "ZENE 1".

感谢任何帮助.

推荐答案

不确定是否有简单的方法,因为OpenJNSON并不是为json对象报告的键顺序,但这里有一个 idea :

SELECT  *
FROM    (
    SELECT  ROW_NUMBER() OVER(partition BY ID ORDER BY charindex('"' + [key] + '":', column_value)) AS sort
    ,   *
    FROM    (
        SELECT  N'{
      "Name": "oxygen",
      "StartDate": "2018-06-05",
      "EndDate": "2018-06-22",
      "Desc": {
        "quality": "better",
        "level,amount": "Scheduled",
        "05": "carbon",
        "GDP": "Max",
        "CDF": "ZENE 1",
        "OTBC": "REMO - MIXED UNIQUE"
      }
        }' AS column_value, 1 AS id
    ) x
    CROSS apply openjson(column_value, '$.Desc')
    ) x
WHERE   sort = 5

按照Desc keys拆分zone_Value后,我使用ROW_$判断json字符串内每个key字符串的位置,然后将其用作返回第五个值的计数器的基.

这种方法的缺点是它使用字符串方法,这种方法可能很慢并且有些脆弱

Json相关问答推荐

jq不会为空输入返回非零

在T—SQL中将STR_AGG与JSON_ARRAY结合起来

合并二维数组的Jolt表达式

从json数组中删除特定元素

Powershell ConvertFrom-Json 意外地从包含字符串的单个项目数组生成字符串而不是对象数组

GitHub Pages无法正确显示我的项目

无法使用 vue.js 访问 JSON 数组的项目

jq可以在两个JSON对象列表中依次添加对象吗?

将环境变量值从 yaml 传递到 json

在Flutter 中将 map 的 Json 转换为 list

如何在 powerapps 中将详细信息表单转换为 json?

Flutter:在本地文件 json 中搜索特殊的阿拉伯字符

在 rust 中从 API 反序列化 serde_json

从 json 对象中过滤掉所有出现的给定属性

如何将任意 json 对象发布到 webapi

在 JSON 反序列化期间没有为System.String类型定义无参数构造函数

IE中Json响应下载(7~10)

使用 jq 如何用其他名称替换键的名称

带有方法参数的 WCF webHttpBinding 错误. 最多可以在没有包装元素的情况下序列化一个主体参数

waitUntilAllTask​​sAreFinished 错误 Swift