gpt4 book ai didi

sql - 使用SQL Server JSON_VALUE搜索JSON数组

转载 作者:行者123 更新时间:2023-12-04 22:40:09 26 4
gpt4 key购买 nike

假设一个给定的json对象:

{"info":{"address":[{"town":"Belgrade"},{"town":"Paris"},{"town":"Madrid"}]}}

SQL Server具有JSON_VALUE函数,可在WHERE子句中使用以与特定的json元素进行匹配,例如
WHERE JSON_VALUE(columnName, $.info.address[1].town) = 'Belgrade'

问题在于它需要一个索引。如何搜索路径指定的所有数组元素?

最佳答案

您可以尝试使用OPENJSONWITH子句(以指定列及其类型),然后在所有元素中进行搜索:

DECLARE @json nvarchar(max)
SET @json = '{"info":{"address":[{"town":"Belgrade"},{"town":"Paris"},{"town":"Madrid"}]}}'

SELECT Town
FROM OPENJSON(@json, '$.info.address')
WITH (
Town nvarchar(100) '$.town'
)
WHERE Town = 'Belgrade'
输出:
------------
Town
------------
Belgrade
如果您的JSON数据在表格列中,则也可以使用以下方法:
-- Table
CREATE TABLE #Data (
Id int,
JsonData varchar(max)
)
INSERT INTO #Data
(Id, JsonData)
VALUES
(1, N'{"info":{"address":[{"town":"Belgrade"},{"town":"Paris"},{"town":"Madrid"}]}}'),
(2, N'{"info":{"address":[{"town":"Belgrade"},{"town":"Paris"},{"town":"Madrid"}]}}'),
(3, N'{"info":{"address":[{"town":"Belgrade"},{"town":"Paris"},{"town":"Madrid"}]}}')


-- Statement
SELECT DISTINCT Id
FROM #Data d
CROSS APPLY (
SELECT *
FROM OPENJSON(d.JsonData, '$.info.address')
WITH (
Town nvarchar(100) '$.town'
)
) j
WHERE (j.Town = 'Belgrade') OR (j.Town = 'Paris')
输出:
-------
Id
-------
1
2
3

关于sql - 使用SQL Server JSON_VALUE搜索JSON数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55608610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com