mysql中文数字转换为阿拉伯数字

例如一百二十三转为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;

如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值