如何搜索包含JSON数组的SQL列
我有一个SQL列,它有一个JSON数组:如何搜索包含JSON数组的SQL列,sql,arrays,tsql,sql-server-2016,json-query,Sql,Arrays,Tsql,Sql Server 2016,Json Query,我有一个SQL列,它有一个JSON数组: {"names":["Joe","Fred","Sue"]} 给定搜索字符串,如何使用SQL在名称数组中搜索匹配项?我使用的是SQL 2016,已经看过JSON_查询,但不知道如何在JSON数组中搜索匹配项。像下面这样的东西就好了 SELECT * FROM table WHERE JSON_QUERY(column, '$.names') = 'Joe' 要在JSON数组中进行搜索,需要使用OPENJSON DECLARE @table TABLE
{"names":["Joe","Fred","Sue"]}
给定搜索字符串,如何使用SQL在名称数组中搜索匹配项?我使用的是SQL 2016,已经看过JSON_查询,但不知道如何在JSON数组中搜索匹配项。像下面这样的东西就好了
SELECT *
FROM table
WHERE JSON_QUERY(column, '$.names') = 'Joe'
要在JSON数组中进行搜索,需要使用
OPENJSON
DECLARE @table TABLE (Col NVARCHAR(MAX))
INSERT INTO @table VALUES ('{"names":["Joe","Fred","Sue"]}')
SELECT * FROM @table
WHERE 'Joe' IN ( SELECT value FROM OPENJSON(Col,'$.names'))
或者,也可以将其与交叉应用
一起使用
SELECT * FROM
@table
CROSS APPLY OPENJSON(Col,'$.names')
WHERE value ='Joe'
它非常简单,可以使用JSON_CONTAINS()函数轻松完成
SELECT * FROM table
where JSON_CONTAINS(column, 'joe','$.name');
Postgres语法
当您知道保存数据的密钥时:
从表名称中选择列名称,其中列名称->>“键”类似于“%QUERYSTRING%”代码>
当您不知道保存数据的密钥时:
从表_name中选择列_name,其中列_name::类似于“%QUERYSTRING%”的文本代码>您可以通过以下查询在JSON数组中搜索匹配项:
SELECT JSON_EXTRACT(COLUMN, "$.names") AS NAME
FROM TABLE JSON_EXTRACT(COLUMN, "$.names") != ""
将表替换为表名,将列替换为表中的列名。
我在你的问题中提到的密钥名称。MySQL参考:这只适用于MySQL,问题是关于SQL 2016的。SQL Server参考: