JSON中的MSSQL搜索

时间:2018-10-15 07:46:58

标签: sql sql-server

如何过滤SQL Server中的json文件?

我有专栏通话详细信息。

{"test","source":"web"}

我想按来源过滤

我做了什么:

select * from TABLE_NAME 
CROSS APPLY OPENJSON(details,'$.source')
where value ='web'

1 个答案:

答案 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集合中“排”出一个可以根据公式引用的行