函数代码如下:
DELIMITER //
CREATE FUNCTION F_AUTO_DIGIT_CONV
(
`i_num` DECIMAL(30,6),
`i_point` int
) RETURNS VARCHAR(50)
BEGIN
DECLARE v_colname VARCHAR(50);
-- 处理输入为 NULL 的情况
IF i_num IS NULL THEN
RETURN NULL;
END IF;
-- 根据数值大小自动转换单位
SET v_colname = (CASE
WHEN i_num <= -100000000 THEN
CONCAT(CAST(truncate(i_num / 100000000, i_point) AS CHAR), '亿')
WHEN i_num > -100000000 AND i_num <= -10000 THEN
CONCAT(CAST(truncate(i_num / 10000, i_point) AS CHAR), '万')
WHEN i_num > -10000 AND i_num < 10000 THEN
CAST(truncate(i_num, i_point) AS CHAR)
WHEN i_num >= 10000 AND i_num < 100000000 THEN
CONCAT(CAST(truncate(i_num / 10000, i_point) AS CHAR), '万')
WHEN i_num >= 100000000 THEN
CONCAT(CAST(truncate(i_num / 100000000, i_point) AS CHAR), '亿元') -- 修正拼写错误
ELSE
CAST(ROUND(i_num, i_point) AS CHAR)
END);
-- 处理前导点或负点的情况(如 ".5" -> "0.5" / "-.5" -> "-0.5")
RETURN (CASE
WHEN v_colname LIKE '.%' THEN CONCAT('0', v_colname)
WHEN v_colname LIKE '-.%' THEN REPLACE(v_colname, '-.', '-0.')
ELSE v_colname
END);
END//
DELIMITER ;
–结果对比如下(想要的是第2种结果,但函数返回错了)-----------------
–函数运行
select F_AUTO_DIGIT_CONV(122046010.4900,2)
结果:1.2200000000亿元
–直接查询
select CONCAT(CAST(truncate(122046010.4900 / 100000000, 2) AS CHAR), ‘亿元’)
结果:1.22亿元