Mysql
在 mysql 5.7 及更高版本中使用 json_contains 函式執行萬用字元搜尋
我有一些使用該
json_object()
函式獲得的嵌套 json 數據。現在我需要檢查我在查詢中使用的特定鍵是否存在某個值,如下所示:-select json_object(..) from tblxyz where json_contains(columnname, '{"MyName" : "FirstName LastName"}')
這種方法的問題是我需要整個字元串“FirstName LastName”才能在實際結果中找到這一行。現在我需要執行萬用字元搜尋。那是:-
select json_object(..) from tblxyz where json_contains(columnname, '{"MyName" : "FirstName"}')
也應該在最終結果中將此條目返回給我。有人可以建議任何解決方法嗎?
您可以將 JSON_SEARCH 與萬用字元一起使用:
SET @j = '{"MyName": "FirstName LastName"}'; SELECT JSON_SEARCH(@j, 'all', 'FirstName%', NULL, '$.MyName');
將返迴路徑:
"$.MyName"
如果要按此過濾,請使用別名並在
HAVING
子句中檢查它:SELECT JSON_SEARCH(`json_col`, 'all', 'FirstName%', NULL, '$.MyName') as `search` FROM `users` HAVING `search` IS NOT NULL;
或者..在一個
WHERE
:SELECT * FROM `users` WHERE JSON_SEARCH(`json_col`, 'all', 'FirstName%', NULL, '$.MyName') IS NOT NULL;
https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
抱歉,您真的對數據庫中的 JSON 期望過高。
任何需要以關係數據庫方式搜尋/排序/加入/等的 JSON“欄位”都應該被拉出(或至少複製出)到它們自己的列中。