永发信息网

mysql5.7的json列,怎么对数组格式查询

答案:2  悬赏:0  手机版
解决时间 2021-03-01 06:06
  • 提问者网友:十年饮冰
  • 2021-02-28 09:07
mysql5.7的json列,怎么对数组格式查询
最佳答案
  • 五星知识达人网友:平生事
  • 2021-02-28 09:37
在MySQL与PostgreSQL的对比中,PG的JSON格式支持优势总是不断被拿来比较。
全部回答
  • 1楼网友:时间的尘埃
  • 2021-02-28 10:34
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 ; 测试: {"old_current_score":"2","new_current_score":"0","old_grade_id":"1","new_grade_id":"1","grade_time":"2016-04-09 00:43:26","grade_upgrade_time":"2017-04-09 00:43:26"} select fn_json_getkeyvalue(reason,1,'old_grade_id');
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯