【问题标题】:Convert a mssql openjson array type value result to a table?将 mssql openjson 数组类型值结果转换为表?
【发布时间】:2019-05-17 04:25:10
【问题描述】:

我的 Microsoft (MS) SQL Server 查询中有一个 json 对象。这个 JSON 对象确实有一个值,它是一个字符串数组。

--this variable holds my JSON object with a value of array type. 
declare @json nvarchar(max) = N'{
                    "value": [
                        "tapiwanashe",
                        "robert",
                        "emmerson",
                        "ruwimbo",
                        "takudzwa",
                        "munyaradzi"
                    ]
                }'

我的目标是使用支持的 MS SQL Server JSON 函数编写一个 SQL 查询,该函数在上面的 JSON 对象值数组中生成一个包含一列和六行值的表。

我尝试运行 JSON_QUERY 和 OPENJSON 函数。但是,这两个函数都返回一个字符串数组作为输出。我想要一个一列六行的结果。

select JSON_QUERY(@json, '$.value')
select [value] from OPENJSON(@json)

我得到的结果是:

value
---------------
[
   "tapiwanashe",
   "robert",
   "emmerson",
   "ruwimbo",
   "takudzwa",
   "munyaradzi"
]

但是,我期望得到的结果如下所示:

value
-----------
tapiwanashe
robert
emmerson
ruwimbo
takudzwa
munyaradzi

结果必须保持值在值数组中出现的顺序。

【问题讨论】:

    标签: sql json sql-server tsql


    【解决方案1】:

    像这样:

    declare @json nvarchar(max) = N'{
                        "value": [
                            "tapiwanashe",
                            "robert",
                            "emmerson",
                            "ruwimbo",
                            "takudzwa",
                            "munyaradzi"
                        ]
                    }'
    
    select value 
    from openjson(@json,'$.value')
    order by [key]
    

    输出

    value
    ----------
    tapiwanashe
    robert
    emmerson
    ruwimbo
    takudzwa
    munyaradzi
    

    【讨论】:

    • 谢谢。这回答了我的问题。我会继续接受这个作为我问题的答案。
    • SELECT [value] from OPENJSON(@json, '$.value') ORDER BY value
    • @HasanMahmood,感谢您的评论。但是,我想保留值在数组值中出现的顺序。
    • @HakunaN 那么你必须 order by [key] 否则,与所有 SELECT 语句一样,返回行的顺序是未定义的,可能会发生变化。
    猜你喜欢
    • 2020-11-20
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多