【问题标题】:SQL server: select all json array elements using JSON_QUERYSQL 服务器:使用 JSON_QUERY 选择所有 json 数组元素
【发布时间】:2020-07-07 12:49:34
【问题描述】:

我在myTable 表中有一列myColumn 具有此值:

"6285":[
         {
           "75963":{"lookupId":"54","value":"0","version":null},
           "75742":{"lookupId":"254","value":"991","version":null}
         }
       ]

我需要使用JSON_VALUEJSON_QUERY 函数编写select 查询(我的sql server 版本不支持OPENJSON)。查询应返回以下结果:

"75963-0, 75742-991"

如您所见,我需要 value 参数的值。另请注意,我不知道6285 数组中的对象将包含哪些元素。我的意思是我事先不会知道其中会有 2 个元素(75963 和 75742)。可能有更多或更少的元素,当然它们可能不同。 但是6285数组中总是只有一个对象。

我可以写什么样的select来实现它?

【问题讨论】:

  • 您的 SQL Server 版本是多少?如果你可以使用JSON_QUERY(),你应该可以使用OPENJSON()
  • @Zhorov Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)。也许可以在 sql 编辑器中使用OPENJSON,但我正在使用Hibernate(Java 框架)进行查询,我认为它不支持OPENJSON。但是,如果您可以使用 OPENJSON 编写查询,那也会有所帮助。

标签: json sql-server select json-query json-value


【解决方案1】:

奇怪,我认为你的版本支持OPENJSON(),你可以尝试使用下面的语句。请注意,问题中的 JSON 无效,它应该在 {} 内。

表:

CREATE TABLE Data (JsonColumn varchar(1000))
INSERT INTO Data (JsonColumn) 
VALUES ('{"6285":[{"75963":{"lookupId":"54","value":"0","version":null},"75742":{"lookupId":"254","value":"991","version":null}}]}')

声明:

SELECT CONCAT(j2.[key], '-', JSON_VALUE(j2.[value], '$.value')) AS JsonValue
FROM Data d
CROSS APPLY OPENJSON(d.JsonColumn) j1
CROSS APPLY OPENJSON(j1.[value], '$[0]') j2

结果:

JsonValue
---------
75963-0
75742-991

如果需要汇总结果,可以使用STRING_AGG()

SELECT STRING_AGG(CONCAT(j2.[key], '-', JSON_VALUE(j2.[value], '$.value')), ',') AS JsonValue
FROM Data d
CROSS APPLY OPENJSON(d.JsonColumn) j1
CROSS APPLY OPENJSON(j1.[value], '$[0]') j2

结果:

JsonValue
-----------------
75963-0,75742-991

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多