如何过滤SQL Server中的json文件?
我有专栏通话详细信息。
{"test","source":"web"}
我想按来源过滤
我做了什么:
select * from TABLE_NAME
CROSS APPLY OPENJSON(details,'$.source')
where value ='web'
答案 0 :(得分:1)
根据Zohar的评论,使您的json有效,然后类似:
--{"mode":"test","source":"web"}
select * from TABLE_NAME
CROSS APPLY
OPENJSON(details)
WITH (
m varchar(256) '$.mode',
s varchar(256) '$.source'
) j
where
j.w = 'web'
但是使用JSON_VALUE可能更适合/更简单:
select * from TABLE_NAME
WHERE json_value(details, '$.source') = 'web'
如果要将每行的json转换为伪表(如WITH子句中的表规范),请使用CROSS APPLY OPENJSON。 SQLServer的行为就像每行json中所有匹配的“行”都混合到psseudotable中一样,并根据每束json伪行来自何处自动连接到源数据表
如果您真的只想从json中获取一个值,并且可以在json中唯一标识要从中获取值的单个“行”,请使用JSON_VALUE。json中只有一个“行” /不是集合,或者您希望从json集合中“排”出一个可以根据公式引用的行