【问题标题】:Mysql json fields - filter inside by paramterMysql json字段-按参数过滤
【发布时间】:2021-03-02 11:39:56
【问题描述】:

我在 mysql json 字段中有值:

{"a": true, "b":true, "c":false, "d":true}

我想在 SQL 中检索每一行的唯一键和值。

例如在行中:

{"a": true, "b":true, "c":false, "d":true}

结果将是:

{"a": true, "b":true, "d":true}

我该怎么做?

谢谢!

【问题讨论】:

    标签: mysql sql jsonfield


    【解决方案1】:

    使用字符串(正则表达式)函数:

    SELECT id,
           val, 
           REGEXP_REPLACE(REGEXP_REPLACE(val, '(, *)?"[^"]+": *false', ''), '\\{ *, *', '\\{') without_false
    FROM test
    

    使用递归 CTE:

    WITH RECURSIVE
    cte AS ( SELECT id, val src, val FROM test
             UNION ALL
             SELECT id, 
                    src,
                    JSON_REMOVE(val, JSON_UNQUOTE(JSON_SEARCH(REPLACE(val, 'false', '"false"'), 'one', 'false')))
             FROM cte
             WHERE JSON_SEARCH(REPLACE(val, 'false', '"false"'), 'one', 'false') IS NOT NULL
             )
    SELECT id, src val, val without_false
    FROM cte
    WHERE JSON_SEARCH(REPLACE(val, 'false', '"false"'), 'one', 'false') IS NULL
    

    fiddle

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      • 2014-08-30
      • 1970-01-01
      • 2021-03-09
      • 2016-06-15
      • 1970-01-01
      相关资源
      最近更新 更多