首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JSON_VALUE迭代多个键

如何使用JSON_VALUE迭代多个键
EN

Stack Overflow用户
提问于 2021-04-29 07:06:40
回答 2查看 313关注 0票数 1

我将JSON存储在数据库中,如下所示:

代码语言:javascript
复制
{
    "EmpName": "John Doe",
    "Department": "IT",
    "Address-1": "101, Sector 1, NY",
    "Address-2": "102, Sector 2, SC",
    "Address-3": "103, Sector 3, NY",
    "Address-4": "104, Sector 4, NY",
    "Salary": 100000
}

我试图检查json是否有地址"102,扇区2,SC“在其中或没有使用JSON_VALUE

但是一个JSON对象可以有多个地址,它们的索引类似于地址-1/2/3/4

以下是我要做的事:

代码语言:javascript
复制
select * 
from emp
where JSON_VALUE(emp.index_data, '$."Address-[*]"') = '102, Sector 2, SC'

我知道我们不能把'*‘放在关键位置,但是我们有什么办法可以做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-29 09:25:14

如果您不知道确切的列名,则可以使用没有模式的OPENJSON

代码语言:javascript
复制
SELECT *
FROM emp
WHERE EXISTS (SELECT 1
    FROM OPENJSON(emp.index_data) j
    WHERE j.[key] LIKE 'Address-%' AND
        j.[value] = '102, Sector 2, SC'
)
票数 0
EN

Stack Overflow用户

发布于 2021-04-29 07:49:13

尝尝这个。

代码语言:javascript
复制
SELECT *
FROM emp
CROSS APPLY OPENJSON(emp.index_data)
with(
        varAddressLine1 nvarchar(Max) '$.Address-1',
        varAddressLine2 nvarchar(Max) '$.Address-2',
        varAddressLine3 nvarchar(Max) '$.Address-3',
        varAddressLine4 nvarchar(Max) '$.Address-4'
    )
where varAddressLine1 = '102, Sector 2, SC'
OR varAddressLine2 = '102, Sector 2, SC'
OR varAddressLine3 = '102, Sector 2, SC'
OR varAddressLine4 = '102, Sector 2, SC'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67312541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档