MySql函数

简单介绍下背景,统计报表,因为之前表设计的不合理,将一个decimal数组存在了一个字符串里,逗号隔开,现在统计的时候需要对应其他的业务,分条展示,所以想到最合理的方式就是字符串的切割,但是每条数据切割的位置不同,mysql的方法没有现成的函数,所以自己写了一个;同时还要计算到当前条数的时候,值的累计求和值,所以在上面的函数基础上加了一个求和值的函数。

之前是没有写过mysql的函数的,所以一开始连语法都看不懂,经过半个下午的努力,基本可以保持UE里面写一个新的函数,编译错误在2个以内。

因为网上找的函数,编译错误太多,所以下面贴上函数的代码,觉得自己可能用到的可以拿走。

1. 输入字符串,切割符,取值的位置获得一个decimal值

CREATE FUNCTION SUBSTR_INDEX_DECIMAL(str VARCHAR(1000), split VARCHAR(10), indexs INT)
RETURNS VARCHAR(1000)
BEGIN
    DECLARE location INT;
    DECLARE percent DECIMAL(4,2);
    WHILE indexs > 1
    DO
        SET location = instr(str, split);
        SET str = substring(str, location + 1);
        set indexs = indexs - 1;
    END WHILE;
    SET location = instr(str, split);
    IF location <> 0 
    THEN SET str = substring(str, 1, location - 1);
    END IF;
    SET percent = CONVERT(str, DECIMAL(4,2));
    RETURN percent;
END

 

2. 输入字符串,切割符,取值的位置获得之前累积的decimal值

CREATE FUNCTION subadd_index_decimal(str VARCHAR(1000), split VARCHAR(10), indexs INT)
RETURNS DECIMAL(5,2)
BEGIN
    DECLARE tempStr VARCHAR(100);
    DECLARE location INT;
    DECLARE percent DECIMAL(5,2);
    DECLARE percentAll DECIMAL(5,2);
    
    SET percentAll = 0;
    WHILE indexs > 0
    DO
        SET location = instr(str, split);
        IF location <> 0
        THEN
            SET tempStr = substring(str, 1, location - 1);
            SET percent = CONVERT(tempStr, DECIMAL(4,2));
            SET percentAll = percentAll + percent;
            SET str = substring(str, location + 1);
            SET indexs = indexs - 1;
        ELSE
            SET percent = CONVERT(str, DECIMAL(5,2));
            SET percentAll = percentAll + percent;
            SET indexs = indexs - 1;
        END IF;
    END WHILE;
    RETURN percentAll;
END

 

tips:没有语法错误,可以直接执行

转载于:https://my.oschina.net/u/3660594/blog/1818275

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值