mysql5 7以下自定義函式解析json

2021-07-11 03:28:17 字數 1925 閱讀 1608

delimiter $$

use `dw`$$

drop function if exists `fn_json_getkeyvalue`$$

create definer=`data`@`%` function `fn_json_getkeyvalue`(

in_jsonarray varchar(4096),#json陣列字串

in_index tinyint, #json物件序號,序號從1開始

in_keyname varchar(64)#鍵名

) returns varchar(512) charset utf8

begin

declare vs_return varchar(4096);

declare vs_jsonarray, vs_json, vs_keyname varchar(4096);

#declare vs_json varchar(4096);

declare vi_pos1, vi_pos2 smallint unsigned;

#寫監控日誌

#insert into dw.t_etl_log(sp_name, title, description)

#values('dw.fn_json_getkeyvalue', '通過json鍵名取鍵值', concat('in_jsonarray=', in_jsonarray));

set vs_jsonarray = trim(in_jsonarray);

set vs_keyname = trim(in_keyname);

if vs_jsonarray = '' or vs_jsonarray is null

or vs_keyname = '' or vs_keyname is null

or in_index <= 0 or in_index is null then

set vs_return = null;

else

#去掉方括號

set vs_jsonarray = replace(replace(vs_jsonarray, '[', ''), ']', '');

#取指定的json物件

set vs_json = substring_index(substring_index(vs_jsonarray,'}', in_index),'}',-1);

if vs_json = '' or vs_json is null then

set vs_return = null;

else

set vs_keyname = concat('"', vs_keyname, '":');

set vi_pos1 = instr(vs_json, vs_keyname);

if vi_pos1 > 0 then

#如果鍵名存在

set vi_pos1 = vi_pos1 + char_length(vs_keyname);

set vi_pos2 = locate(',', vs_json, vi_pos1);

if vi_pos2 = 0 then

#最後乙個元素沒有','分隔符,也沒有結束符'}'

set vi_pos2 = char_length(vs_json) + 1;

end if;

set vs_return = replace(mid(vs_json, vi_pos1, vi_pos2 - vi_pos1), '"', '');

end if;

end if;

end if;

return(vs_return);

end$$

delimiter ;

測試:

select fn_json_getkeyvalue(reason,1,'old_grade_id');

MySQL5 7建立自定義函式

這裡以子id查詢最頂級父級資料為例 在mysql5.7建立自定義函式時,要注意有乙個坑,要加上delimiter delimiter 這兩個關鍵字,要不然就會一直報錯,要注意!例如 create function select parent province parent area code var...

centos7安裝 mysql5 7,自定義目錄

shell yum search libaio shell yum install libaio shell mkdir prod db shell cd prod db shell wget shell tar axvf mysql 5.7.27 linux glibc2.12 x86 64.ta...

mysql自定義函式優點 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...