Mysql

在 mysql 5.7 及更高版本中使用 json_contains 函式執行萬用字元搜尋

  • February 27, 2020

我有一些使用該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“欄位”都應該被拉出(或至少複製出)到它們自己的列中。

引用自:https://dba.stackexchange.com/questions/222418