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

新手上路,请多包涵

我有一个包含单个 JSON 数组的 SQL 列:

 {"names":["Joe","Fred","Sue"]}

给定一个搜索字符串,如何使用 SQL 在名称数组中搜索匹配项?我正在使用 SQL 2016 并查看了 JSON_QUERY,但不知道如何在 JSON 数组上搜索匹配项。像下面这样的东西会很好。

 SELECT *
FROM table
WHERE JSON_QUERY(column, '$.names') = 'Joe'

原文由 paultechguy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 602
2 个回答

要在 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'))

或者作为替代方案,可以将其与 CROSS APPLY 一起使用。

 SELECT * FROM
    @table
    CROSS APPLY OPENJSON(Col,'$.names')
WHERE value ='Joe'

原文由 Serkan Arslan 发布,翻译遵循 CC BY-SA 4.0 许可协议

只想在现有答案中添加一个简单的解决方案,如何检查 json 中的数组是否包含值:

 DECLARE @Json NVARCHAR(max) = '{"names":["Joe","Fred","Sue"]}'
IF EXISTS (SELECT value FROM OPENJSON(@Json,'$.names') WHERE value = 'Joe')
    PRINT 'Array contains "Joe"'
ELSE
    PRINT 'Array does not contain "Joe"'

原文由 Mykhailo Seniutovych 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进