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

这篇博客介绍了如何在MySQL中创建函数,以循环读取和处理JSON数据。内容包括对JSON数据的验证、字符串参数的字符集设定以及在字符串比较时避免使用等于操作的注意事项。此外,还提到了在2021.11.23更新中,建议使用LIKE语句或strcmp函数进行字符串对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

补充

2021.11.23 字符串对比应该用if varname like ‘xxx’ then 而不是 if varname = ‘xxx’ then
也可以使用函数 strcmp(str1,str2)

函数 strcmp 用例
https://www.geeksforgeeks.org/strcmp-function-in-mysql/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值