MySQL5.7中JSON系列操作函數

前言

在工作中,遇到這種情況,某些字段存儲的是josn格式,之前的做法是先查出數據然後進行json_decode()處理,然後再進行相關操作;最近發現了MySQL也支持一些json系列的操作函數,所以記錄下來,以後可以更加方便快捷對此類數據進行靈活操作。

帶有json格式字段的數據表

注:以下函數僅針對MySQL5.7及以上版本;如果SQL語句報錯,請先查看MySQL版本。

 

JOSN相關查詢操作

(1)JSON_CONTAINS -- 獲取josn字段中包含某一項的數據

-- 查詢"projext_type" 字段中有"博士項目"的數據
SELECT * FROM crm_test WHERE JSON_CONTAINS(project_type, '["博士項目"]');

查詢結果: 

 

 (2)JSON_SEARCH  -- JSON_SEARCH(字段,[ 'one':第一個符合條件 | 'all':所有符合條件],查找的條件)

-- 查詢"project_type"字段中以 "專業"開頭的字段
SELECT * FROM crm_test WHERE JSON_SEARCH(project_type,'one','專業%') IS NOT NULL

查詢結果:

(3) JSON Path -- 精準獲取josn中的某個數據

-- 獲取project_type字段中 josn數組的第二個元素(注:下標從0開始)
SELECT project_type->>"$[1]" as 'type' FROM crm_test 

查詢結果:

(4)JSON_UNQUOTE -- 獲取json字段中的某一項

-- 獲取id爲6的name,和project_type 字段中的 cphone字段
select name,JSON_UNQUOTE(project_type->'$.cphone') as cphone from crm_test where id=6


-- 等價於
select name,project_type->>'$.cphone' as cphone from crm_test where id=6

數據結構:

查詢結果:

 

JOSN相關更新操作

(1)JSON_MERGE -- 追加

-- 將id爲5的 project_type 字段追加 "合作辦學"
UPDATE crm_test SET project_type = JSON_MERGE(project_type,'["合作辦學"]') WHERE id = 5;

 效果前:

效果後: 

(2)JSON_SET -- 更改(替換已經存在的值,增加不存在的值)

-- 將id爲3的,josn第一個元素 更改爲"同等學力"
UPDATE crm_test SET project_type = JSON_SET(project_type, '$[0]','同等學力') WHERE id = 3;

效果前:

效果後: 

(3)JSON_INSERT  -- 插入新值(新增不存在的值

-- 將id爲3的project_type 新增"合作辦學"
UPDATE crm_test SET project_type = JSON_INSERT(project_type, '$[1]','合作辦學') WHERE id = 3;

-- JSON_INSERT(json_doc, path, val[, path, val] ...)
-- json_doc 是JSON字符串
-- path 是要插入數據或更新值的元素的路徑
-- val 是新的值

效果前:

 

效果後:

(4)JSON_REPLACE -- 替換(替換/修改已經存在的值

-- 將id爲1的project_type 字段的第一個元素替換成"同等學力"
UPDATE crm_test SET project_type = JSON_REPLACE(project_type, '$[0]','同等學力') WHERE id = 1;

效果前:

效果後: 

(5)JSON_ARRAY_APPEND -- 向指定位置尾部追加數據

UPDATE crm_test SET project_type = JSON_ARRAY_APPEND(project_type, '$[2]',"博士項目") WHERE id = 2;

效果前:

效果後:

(6)JSON_REMOVE -- 從指定位置移除數據

-- 將id爲4的數據中 project_type josn數組中的第一個元素刪除掉
UPDATE crm_test SET project_type = JSON_REMOVE(project_type, '$[0]') WHERE id = 4;

效果前:

效果後:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章