我将JSON存储在数据库中,如下所示:
{
"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
以下是我要做的事:
select *
from emp
where JSON_VALUE(emp.index_data, '$."Address-[*]"') = '102, Sector 2, SC'我知道我们不能把'*‘放在关键位置,但是我们有什么办法可以做到这一点呢?
发布于 2021-04-29 09:25:14
如果您不知道确切的列名,则可以使用没有模式的OPENJSON :
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'
)发布于 2021-04-29 07:49:13
尝尝这个。
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'https://stackoverflow.com/questions/67312541
复制相似问题