一、JSON_CONTAINS
先來看看我百度到的定義和實例
============================================================================
解讀:參數主要有三個值,分別是json對象、值、json的具體key值(可缺省)
人話:前面包含后面為真則返回1(前面包含后面!!前面包含后面!!前面包含后面!!)
寫法:
1.select * from A where JSON_CONTAINS(json對象,值,json的某個key)
- 完整簡單寫法(key的值也是一個json):select * from A where JSON_CONTAINS(@json,'1','$.keyname') //篩選出json對象keyname這個key值包含1的記錄
- 不帶path的寫法(第一個參數已經是想比對的json)select JSON_CONTAINS(A.xx,'1') //根據A表xx字段(json值)是否包含1返回1或0
- 結合JSON_ARRAY的寫法,如下,因為要前面包含后面,所以子集至少是[2,6]
- 結合JSON_ARRAY寫法之篩選符合任意個數元素的記錄,此時把JSON_ARRAY放前面,匹配字段放后面(滿足需求:scene_id包含1或6就返回)
二、JSON_EXTRACT
==============================================================================
解讀:提取json的key的值,如有多個則以數組返回
用法:可以用來判斷或提取值,后面可以加like或=等匹配詞,跟在select后面則返回符合的json字段值,跟在where后面則返回作為條件判斷
ps:
以上兩種寫法需要數據庫有執行權限,可能會報錯,eg:
需要給數據庫用戶加權限,eg
GRANT ALL PRIVILEGES ON *.* TO ‘用戶名’@’%’ ;
FLUSH PRIVILEGES;
三、符號寫法
寫法:
字段名->"$.keyname.keyname......"
舉例說明:
content字段是一個json值,層級結構如下,想獲取橙色字段值用於判斷,寫法如下
層層遞進到想要的字段,注意中間如果是數組還需定位到數組的第幾個元素