Har*_*m M 5 sql-server json sql-server-2016 sql-server-json json-query
我的表中有一个nvarchar(1000)字段,并且正在该列中存储JSON数据。
例如:
CONTENT_RULE_ID CONTENT_RULE
1 {"EntityType":"Inquiry", "Values":[1,2]}
2 {"EntityType":"Inquiry", "Values":[1,3]}
3 {"EntityType":"Inquiry", "Values":[2,4]}
4 {"EntityType":"Inquiry", "Values":[5,6,1]}
6 {"EntityType":"Inquiry", "Values":[8,1]}
8 {"EntityType":"Inquiry", "Values":[10,12,11]}
Run Code Online (Sandbox Code Playgroud)
由此我如何在sql server中使用JSON_QUERY获取所有查询ID为1的CONTENT_RULE_ID
@Harisyam,您可以尝试以下查询吗
declare @val int = 1
;with cte as (
select *
from CONTENT_RULES
cross apply openjson (CONTENT_RULE, '$')
), list as (
select
CONTENT_RULE_ID, replace(replace([value],'[',''),']','') as [value]
from cte
where CONTENT_RULE_ID in (
select CONTENT_RULE_ID
from cte
where [key] = 'EntityType' and [value] = 'Inquiry'
)
and [key] = 'Values'
)
select
CONTENT_RULE_ID, s.value
from list
cross apply string_split([value],',') s
where s.value = @val
Run Code Online (Sandbox Code Playgroud)
我使用SQL string_split函数来一一获取查询值
输出是
第二个查询可以跟随一个查询
select
CONTENT_RULE_ID
from CONTENT_RULES
cross apply openjson (CONTENT_RULE, '$')
where replace(replace(value,'[',','),']',',') like '%,1,%'
Run Code Online (Sandbox Code Playgroud)
也许需要 OpenJSON 支持的最完整的 SQL 查询如下
select
content_rule_id,
[value]
from Content as c
cross apply openjson(c.CONTENT_RULE, '$') with (
EntityType nvarchar(100),
[Values] nvarchar(max) as json
) as e
cross apply openjson([Values], '$') as v
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1805 次 |
| 最近记录: |