【问题标题】:How to search SQL column containing JSON array如何搜索包含 JSON 数组的 SQL 列
【发布时间】:2018-04-24 15:40:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql arrays tsql sql-server-2016 json-query


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    非常简单,使用 JSON_CONTAINS() 函数即可轻松完成。

    SELECT * FROM  table
    where  JSON_CONTAINS(column, 'joe','$.name');
    

    【讨论】:

    【解决方案3】:

    Postgres 语法

    当您知道保存数据的密钥时:

    SELECT column_name from table_name where column_name->>'key' LIKE '%QUERYSTRING%';

    当您不知道保存数据的密钥时:

    SELECT column_name from table_name where column_name::text LIKE '%QUERYSTRING%';

    【讨论】:

    • 你拯救了我的夜晚!非常感谢。
    【解决方案4】:

    您可以通过以下查询在 JSON 数组上搜索匹配项:

    SELECT JSON_EXTRACT(COLUMN, "$.names") AS NAME
    FROM TABLE JSON_EXTRACT(COLUMN, "$.names") != ""
    

    将 TABLE 替换为您的表名,将 COLUMN 替换为表中的列名。 我在你的问题中提到的名字。

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2014-01-13
      • 2016-09-18
      • 2021-12-01
      相关资源
      最近更新 更多