我有一個 JSON 列,存盤的資料如下所示:
{"results":{"made":true,"cooked":true,"eaten":true}}
{"results":{"made":true,"cooked":true,"eaten":false}}
{"results":{"made":true,"eaten":true,"a":false,"b":true,"c":false}, "more": {"ignore":true}}
我需要找到所有行1 值$.results是false。
我嘗試使用JSON_CONTAINS()但沒有找到一種方法來將它與布爾 JSON 值進行比較,或者查看$.results.
這需要與 MySQL 5.7 一起使用,但如果不可能,我將接受 MySQL 8 的答案。
uj5u.com熱心網友回復:
我不知道true/false/null使用 JSON 函式搜索 JSON值的方法 - 實際上,在使用 JSON_CONTAINS、JSON_SEARCH 等進行搜索時,這些值被視為字串型別值。
使用正則運算式進行檢查。就像是
SELECT id,
JSON_PRETTY(jsondata)
FROM test
WHERE jsondata REGEXP '"results": {[^}] : false.*}';
演示
uj5u.com熱心網友回復:
您可以JSON_EXTRACT通過LIKE這種方式簡單地使用條件搜索。
SELECT * FROM table1 WHERE JSON_EXTRACT(json_dict, '$.results') LIKE '%: false%';
檢查這個資料庫小提琴
uj5u.com熱心網友回復:
其他答案中模式匹配的替代方法是從$.results帶有運行數字的輔助表中提取所有值并檢查每個條目
SELECT DISTINCT v.id, v.json_value
FROM (
SELECT id, json_value, JSON_EXTRACT(json_value, '$.results.*') value_array
FROM json_table
) v
JOIN seq ON seq.n < JSON_LENGTH(v.value_array)
WHERE JSON_EXTRACT(v.value_array, CONCAT('$[', seq.n, ']')) = false
這是演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/355973.html
標籤:mysql mysql-json
上一篇:三表連接匹配和不匹配的記錄
