例如一百二十三转为123
代码函数如下
drop function if EXISTS zz_convert_chinese_number;
create FUNCTION zz_convert_chinese_number (chinese VARCHAR(100),zhfs int,zhys int) RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
-- zhfs 转换方式 zhys 转换样式
DECLARE res VARCHAR(100) DEFAULT ''; -- 结果
DECLARE leftNumResStr VARCHAR(100) DEFAULT ''; -- 左侧数值结果
DECLARE leftNumRes BIGINT default 0; -- 左侧数值结果
DECLARE leftNumStr VARCHAR(100) ; -- 左侧数值
DECLARE leftSection BIGINT default 0; -- 左侧临时数值
DECLARE leftNumber INT DEFAULT 0; -- 左侧临时数值
DECLARE rightNumStr VARCHAR(100); -- 右侧数值
DECLARE rightNumResStr VARCHAR(100) DEFAULT ''; -- 右侧数值结果
DECLARE zfStr VARCHAR(10) DEFAULT ''; -- 正数 负数
DECLARE unitNames VARCHAR(100) DEFAULT '十百千万亿'; -- 单位
DECLARE chineseNums VARCHAR(100) DEFAULT '零一二三四五六七八九'; -- 中文数字
if locate('点',chinese)>0 THEN -- 包含点
set leftNumStr=SUBSTRING_INDEX(chinese,'点',1);
set rightNumStr=SUBSTRING_INDEX(chinese,'点',-1);
ELSE
set leftNumStr=chinese;
set rightNumStr='';
end if;
if left(leftNumStr,1)='负' then set zfStr='-';set leftNumStr=SUBSTRING(leftNumStr,2); end if;
set @i=0;
set @leftLength=CHAR_LENGTH(leftNumStr);
while @i<@leftLength DO
set @c=SUBSTRING(leftNumStr,@i+1,1);
set @num=locate(@c,chineseNums)-1;
if @num>=0 then
set leftNumber=@num;
else
set @unitVaue=1;
if @c='十' THEN
set @unitVaue=10;
ELSEIF @c='百' THEN
set @unitVaue=100;
ELSEIF @c='千' THEN
set @unitVaue=1000;
ELSEIF @c='万' THEN
set @unitVaue=10000;
ELSEIF @c='亿' THEN
set @unitVaue=100000000;
end if;
if @c='万' or @c='亿' THEN
set leftSection=(leftNumRes+leftSection+leftNumber)*@unitVaue;
set leftNumRes=leftSection;
set leftSection=0;
else
if leftNumber=0 and @i=0 then
set leftSection=leftSection+1*@unitVaue;
else
set leftSection=leftSection+leftNumber*@unitVaue;
end if;
end if;
set leftNumber=0;
end if;
set @i=@i+1;
end while;
set leftNumRes=leftNumRes+leftSection+leftNumber;
set leftNumResStr=concat(leftNumRes,'');
-- 整数部分结束 开始小数部分
if rightNumStr<>'' then
set @i=0;
set @rightLength=CHAR_LENGTH(rightNumStr);
while @i<@rightLength DO
set @c=SUBSTRING(rightNumStr,@i+1,1);
set @num=locate(@c,chineseNums)-1;
set rightNumResStr=concat(rightNumResStr,@num);
set @i=@i+1;
end while;
set leftNumResStr=concat(leftNumResStr,'.',rightNumResStr);
end if;
RETURN concat(zfStr,leftNumResStr);
END;
如图

1182

被折叠的 条评论
为什么被折叠?



