问答一下,轻松解决,电脑应用解决专家!
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win10/Win11
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascriptLinux系统
PHP教程CSS教程XML教程

mysql 创建函数循环读取JSON数据

更新时间:2021-12-30 13:52 作者:用户昵称不能为空点击:
DROP FUNCTION IF EXISTS parse_json;
DELIMITER //
CREATE FUNCTION parse_json(jsonStr text charset utf8, varname TEXT charset utf8) RETURNS int
DETERMINISTIC
BEGIN
DECLARE ratio float default 0;
    DECLARE i int default 0;
 
IF json_valid(jsonStr) = 0 THEN
RETURN 0;
END IF;
 
WHILE i < JSON_LENGTH(jsonStr) DO
        SELECT JSON_EXTRACT(jsonStr,CONCAT('$[',i,'].ratio')) INTO ratio;
        SELECT i + 1 INTO i;
        IF varname LIKE 'is_a' THEN
            IF ratio != 20 THEN
                return 1;
            END IF;
        END IF;
 
        IF varname LIKE 'is_b' THEN
            IF ratio > 10 THEN
                return 1;
            END IF ;
         END IF;
 
        IF varname LIKE 'is_c' THEN
            IF ratio >= 1 THEN
                RETURN 1;
            END IF;
        END IF;
 
    END WHILE;
    RETURN 0;
END //
DELIMITER ;
 
测试
 
-- test
set @json = '[{"id":301,"name":"AA","ratio":0.0},{"id":301,"name":"BB","ratio":0},{"id":301,"name":"CC","ratio":-0.01}]';
select  parse_json(@json,'is_a'),parse_json(@json,'is_b'),parse_json(@json,'is_c');
 
注意
 
JSON加一层是否是JSON的验证.
string类型的参数(varchar/text)需要指定字符集,否则会出错。
注意,字符串不能直接用 if varname = ‘xxx’ then,这样会出现无法相等情况,可以用LIKE
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容