首頁 > 軟體

mysql中取出json欄位的小技巧

2022-07-05 14:02:44

mysql取出json欄位技巧

有時候會將一些資訊以json形式存在資料庫中,如果太長的話,在取的過程中sql執行會比較慢,如果只取某些鍵值的話會比較浪費

mysql中使用函數JSON_EXTRACT()

±—±---------------------------------------------------------------+
| id | data |
±—±---------------------------------------------------------------+
| 1 | {「Tel」: 「132223232444」, 「name」: 「david」, 「address」: 「Beijing」} |
| 2 | {「Tel」: 「13390989765」, 「name」: 「Mike」, 「address」: 「Guangzhou」} |
±—±---------------------------------------------------------------+
select json_extract('{"name":"Zhaim","tel":"13240133388"}',"$.tel");

spark sql中使用get_json_object()

select get_json_object(i.extra, '$.sale_currency');
select sum(get_json_object(i.extra, '$.sale_price') * i.count) as sale_price;

mysql取json,在不知道key情況下,取他的value詳細值

{ "selects" :{ "20071090" :{ "NN" : 41,
"LXFS1" : "12365",
"GH" : "20071090",
"RZZW" : "辦公室主任",
"sxzym" : "園林植物與觀賞園藝",
"ZC" : "副教授",
"XGW" : "行政管理後勤",
"XB" : "男",
"ZZMM" : "中共黨員",
"ZWZC" : "高階職稱",
"MZ" : "漢",
"CSRQ" : 307123200000,
"XL" : "碩士",
"selectKey" : "20071090",
"XM" : "張三",
"GZBM" : "辦公室",
"PZGW" : "副教授三級崗位",
"XW" : "農學碩士" }}}

在這個mysql資料庫下想取一個姓名標紅是如內容如上圖

建立檢視,取這個欄位的姓名,由於他的key:"20071090" 是動態的不確定,而且在這個地方只會出現一次,首先我取第一層key==>selects下的值

SELECT ZDLSXM->'$.selects' from VI_YXGR

在這個基礎上,再取下一層,由於這層是動態的key,不能使用第一步的  ZDLSXM->'$.selects' 那種方法,所以我選擇substring_index 方法 去掉大括號的方式來,再使用CONCAT() 拼接成為新的json,如下圖示紅的地方刪除掉

 
SELECT CONCAT("{",substring_index(substring_index(ZDLSXM->'$.selects', '{', -1),"}",1),"}") from VI_YXGR

 再包裝一層就可以取道這個名稱了

SELECT SE_ZDLSXM->'$.name' AS ZDLSXM from (
SELECT CONCAT("{",substring_index(substring_index(ZDLSXM->'$.selects', '{', -1),"}",1),"}") as SE_ZDLSXM  from VI_YXGR
) sss 

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com