本文主要是介绍mysql阿拉伯数字转换中文数字函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
函数如下
1.中间一部分代码可以提取出来作为公共方法,我这里并没有提取,因为我是在代码中动态添加的
2.样式目前只做了:123转为一百二十三这类的
drop function if EXISTS zz_convert_number_chinese;
create FUNCTION zz_convert_number_chinese (numStr VARCHAR(100),zhfs int,zhys int) RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN-- zhfs 转换方式 zhys 转换样式DECLARE res VARCHAR(100) DEFAULT ''; -- 结果DECLARE leftNumStr VARCHAR(100) ; -- 左侧数值DECLARE leftNum BIGINT; -- 左侧数值DECLARE leftPart1 INT; -- 左侧数值部分 4位DECLARE leftPart2 INT; -- 左侧数值部分 4位DECLARE leftPart3 INT; -- 左侧数值部分 4位DECLARE leftPart4 INT ; -- 左侧数值部分 4位 DEFAULT 0DECLARE leftNumResStr VARCHAR(100) DEFAULT ''; -- 左侧数值结果DECLARE rightNumStr VARCHAR(100); -- 右侧数值DECLARE rightNumResStr VARCHAR(100) DEFAULT ''; -- 右侧数值结果DECLARE zfStr VARCHAR(10) DEFAULT ''; -- 正数 负数DECLARE lastIsZero INT; -- 最后数值是否为0DECLARE unitNames VARCHAR(100) DEFAULT '十,百,千,万,亿'; -- 单位DECLARE chineseNums VARCHAR(100) DEFAULT '零,一,二,三,四,五,六,七,八,九'; -- 中文数字if locate('.',numStr)>0 THEN -- 包含点set leftNumStr=SUBSTRING_INDEX(numStr,'.',1);set rightNumStr=SUBSTRING_INDEX(numStr,'.',-1);ELSEset leftNumStr=numStr;set rightNumStr='';end if;if left(leftNumStr,1)='-' then set zfStr='负';set leftNumStr=REPLACE(leftNumStr,'-',''); end if;if LENGTH(leftNumStr)>16 then RETURN numStr; -- 超出范围end if;set leftNum=cast(leftNumStr as signed);if leftNum=0 then set leftNumResStr='零';else set leftPart1=leftNum % 10000;set leftNum=leftNum / 10000;set leftPart2=leftNum % 10000;set leftNum=leftNum / 10000;set leftPart3=leftNum % 10000;set leftNum=leftNum / 10000;set leftPart4=leftNum % 10000;set leftNum=leftNum / 10000;if leftPart1>0 then set lastIsZero=1;set @i=0;set @leftPart1=leftPart1;while @leftPart1>0 DOset @digit=@leftPart1%10;if @digit=0 THEN if lastIsZero=0 then set leftNumResStr=concat('零',leftNumResStr);end if;set lastIsZero=1;else set @tempUnitName='';if @i<>0 then set @tempUnitName=SUBSTRING_INDEX(SUBSTRING_INDEX(unitNames,',',@i),',',-1);end if;set @tempNumberChinese=SUBSTRING_INDEX(SUBSTRING_INDEX(chineseNums,',',@digit+1),',',-1);set leftNumResStr=concat(@tempNumberChinese,@tempUnitName,leftNumResStr);set lastIsZero=0;end if;set @leftPart1=@leftPart1 DIV 10;set @i=@i+1;end while;if leftPart1<1000 then set leftNumResStr=concat('零',leftNumResStr);end if;end if;if leftPart2>0 then if leftPart1>0 and leftPart2%10=0 then if leftNumResStr<>'' and left(leftNumResStr,1)<>'零' then set leftNumResStr=concat('零',leftNumResStr);end if;end if;set lastIsZero=1;set @i=0;set @leftPart2=leftPart2;set @leftPart2Chinese='';while @leftPart2>0 DOset @digit=@leftPart2%10;if @digit=0 THEN if lastIsZero=0 then set @leftPart2Chinese=concat('零',@leftPart2Chinese);end if;set lastIsZero=1;else set @tempUnitName='';if @i<>0 then set @tempUnitName=SUBSTRING_INDEX(SUBSTRING_INDEX(unitNames,',',@i),',',-1);end if;set @tempNumberChinese=SUBSTRING_INDEX(SUBSTRING_INDEX(chineseNums,',',@digit+1),',',-1);set @leftPart2Chinese=concat(@tempNumberChinese,@tempUnitName,@leftPart2Chinese);set lastIsZero=0;end if;set @leftPart2=@leftPart2 DIV 10;set @i=@i+1;end while;set leftNumResStr=concat(@leftPart2Chinese,'万',leftNumResStr);if leftPart2<1000 then if leftNumResStr<>'' and left(leftNumResStr,1)<>'零' then set leftNumResStr=concat('零',leftNumResStr);end if;end if;else if leftNumResStr<>'' and left(leftNumResStr,1)<>'零' then set leftNumResStr=concat('零',leftNumResStr);end if;end if;if leftPart3>0 then if leftPart2>0 and leftPart3%10=0 then if leftNumResStr<>'' and left(leftNumResStr,1)<>'零' then set leftNumResStr=concat('零',leftNumResStr);end if;end if;set lastIsZero=1;set @i=0;set @leftPart3=leftPart3;set @leftPart3Chinese='';while @leftPart3>0 DOset @digit=@leftPart3%10;if @digit=0 THEN if lastIsZero=0 then set @leftPart3Chinese=concat('零',@leftPart3Chinese);end if;set lastIsZero=1;else set @tempUnitName='';if @i<>0 then set @tempUnitName=SUBSTRING_INDEX(SUBSTRING_INDEX(unitNames,',',@i),',',-1);end if;set @tempNumberChinese=SUBSTRING_INDEX(SUBSTRING_INDEX(chineseNums,',',@digit+1),',',-1);set @leftPart3Chinese=concat(@tempNumberChinese,@tempUnitName,@leftPart3Chinese);set lastIsZero=0;end if;set @leftPart3=@leftPart3 DIV 10;set @i=@i+1;end while;set leftNumResStr=concat(@leftPart3Chinese,'亿',leftNumResStr);if leftPart3<1000 then if leftNumResStr<>'' and left(leftNumResStr,1)<>'零' then set leftNumResStr=concat('零',leftNumResStr);end if;end if;else if leftNumResStr<>'' and left(leftNumResStr,1)<>'零' then set leftNumResStr=concat('零',leftNumResStr);end if;end if;if leftPart4>0 then if leftPart3=0 then set leftNumResStr=concat('亿',leftNumResStr);end if;set lastIsZero=1;set @i=0;set @leftPart4=leftPart4;set @leftPart4Chinese='';while @leftPart4>0 DOset @digit=@leftPart4%10;if @digit=0 THEN if lastIsZero=0 then set @leftPart4Chinese=concat('零',@leftPart4Chinese);end if;set lastIsZero=1;else set @tempUnitName='';if @i<>0 then set @tempUnitName=SUBSTRING_INDEX(SUBSTRING_INDEX(unitNames,',',@i),',',-1);end if;set @tempNumberChinese=SUBSTRING_INDEX(SUBSTRING_INDEX(chineseNums,',',@digit+1),',',-1);set @leftPart4Chinese=concat(@tempNumberChinese,@tempUnitName,@leftPart4Chinese);set lastIsZero=0;end if;set @leftPart4=@leftPart4 DIV 10;set @i=@i+1;end while;set leftNumResStr=concat(@leftPart4Chinese,'万',leftNumResStr);end if;if left(leftNumResStr,1)='零' then set leftNumResStr=SUBSTR(leftNumResStr,2); end if;end if;-- 整数部分结束 开始小数部分if rightNumStr<>'' then set @i=0;set @rightLength=LENGTH(rightNumStr);while @i<@rightLength DOset @rightIndex=cast(SUBSTRING(rightNumStr,@i+1,1) as signed);set @tempNumberChinese=SUBSTRING_INDEX(SUBSTRING_INDEX(chineseNums,',',@rightIndex+1),',',-1);set rightNumResStr=concat(rightNumResStr,@tempNumberChinese);set @i=@i+1;end while;set leftNumResStr=concat(leftNumResStr,'点',rightNumResStr);end if;RETURN leftNumResStr;
END;
结果如下
这篇关于mysql阿拉伯数字转换中文数字函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!