如何搜索包含JSON数组的SQL列

如何搜索包含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

我有一个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 (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参考: