简单介绍下背景,统计报表,因为之前表设计的不合理,将一个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:没有语法错误,可以直接执行