Mysql json 字段 - 按参数过滤内部
Mysql json fields - filter inside by paramter
我在 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}
我该怎么做?
谢谢!
使用字符串(正则表达式)函数:
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
我在 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}
我该怎么做?
谢谢!
使用字符串(正则表达式)函数:
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