mysql大写数字转阿拉伯数字_把中文数字转化成阿拉伯数字?有什么好的方法?用sql 语句。...

create table Mytb(z1 varchar(18))

insert into Mytb values('一万三千六百七十三')

insert into Mytb values('一万三千六百七十')

insert into Mytb values('一万零六百七十三')

insert into Mytb values('一万十八')

insert into Mytb values('十八')

create function reInt(@Myii varchar(2))

returns int

as

begin

declare @iii int

set @iii=0

if(@Myii ='一')

set @iii=1

if(@Myii ='二')

set @iii=2

if(@Myii ='三')

set @iii=3

if(@Myii ='四')

set @iii=4

if(@Myii ='五')

set @iii=5

if(@Myii ='六')

set @iii=6

if(@Myii ='七')

set @iii=7

if(@Myii ='八')

set @iii=8

if(@Myii ='九')

set @iii=9

return (@iii)

end

go

--第一个函数你不需要用到,是我下面的函数要用

--drop function dbo.Myfun

create function Myfun(@ii varchar(20))

returns int

as

begin

declare @w int,@q int,@b int ,@s int,@g int

select @w=0,@q=0,@b=0,@s=0,@g=0

if(charindex('万',@ii)>0)

set @w=(dbo.reInt(left(@ii,1)))*10000

if(charindex('千',@ii)>0)

set @q=(dbo.reInt(right(left(@ii,charindex('千',@ii)-1),1)))*1000

if(charindex('百',@ii)>0)

set @b=(dbo.reInt(right(left(@ii,charindex('百',@ii)-1),1)))*100

if(charindex('十',@ii)>0)

begin

declare @Mychar varchar(2)

if(charindex('十',@ii)=1)

set @s=10

else

begin

set @MyChar=right(left(@ii,charindex('十',@ii)-1),1)

if(@Mychar='万' or @Mychar='千' or @Mychar='百' or @Mychar='零')

set @s=10

else

set @s=(dbo.reInt(@Mychar))*10

end

end

if(charindex('十',@ii)

set @g=dbo.reInt(right(@ii,1))

return (@w+@q+@b+@s+@g)

end

go

--exec sp_helptext Myfun

select * from Mytb

select dbo.Myfun(z1) from Mytb

测试结果:

z1

------------------

一万三千六百七十三

一万三千六百七十

一万零六百七十三

一万十八

十八

(所影响的行数为 5 行)

-----------

13673

13670

10673

10018

18

(所影响的行数为 5 行)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 MySQL 的自定义函数来将金额数字中文大写。以下是一个自定义函数的例子: ```sql DELIMITER $$ CREATE FUNCTION convert_to_chinese(IN num DECIMAL(16,2)) RETURNS VARCHAR(255) BEGIN DECLARE sign CHAR(2); -- 符号 DECLARE integer_part VARCHAR(64); -- 整数部分 DECLARE decimal_part VARCHAR(64); -- 小数部分 DECLARE result VARCHAR(255); -- 结果 IF num < 0 THEN SET sign = '负'; SET num = -num; ELSE SET sign = ''; END IF; SET integer_part = CAST(FLOOR(num) AS CHAR); SET decimal_part = RIGHT(CAST(num AS CHAR), 2); SET result = sign + _convert_integer_part(integer_part) + '元' + _convert_decimal_part(decimal_part) + '角'; RETURN result; END$$ -- 换整数部分 CREATE FUNCTION _convert_integer_part(IN num VARCHAR(64)) RETURNS VARCHAR(255) BEGIN DECLARE i INT DEFAULT 1; -- 数字位数 DECLARE len INT; -- 数字长度 DECLARE result VARCHAR(255); -- 结果 IF num = '0' THEN RETURN '零'; END IF; SET len = LENGTH(num); WHILE i <= len DO SET result = CONCAT(_convert_digit(SUBSTR(num, i, 1)), _convert_unit(len - i)) + result; SET i = i + 1; END WHILE; SET result = TRIM(result); SET result = REPLACE(result, '零零', '零'); SET result = REPLACE(result, '零万', '万'); SET result = REPLACE(result, '零亿', '亿'); SET result = REPLACE(result, '亿万', '亿'); RETURN result; END$$ -- 换小数部分 CREATE FUNCTION _convert_decimal_part(IN num VARCHAR(2)) RETURNS VARCHAR(255) BEGIN DECLARE result VARCHAR(255); -- 结果 IF num = '00' THEN RETURN '整'; END IF; SET result = _convert_digit(SUBSTR(num, 1, 1)); IF result <> '零' THEN SET result = result + '角'; END IF; SET result = result + _convert_digit(SUBSTR(num, 2, 1)); IF result <> '零' THEN SET result = result + '分'; END IF; RETURN result; END$$ -- 数字位 CREATE FUNCTION _convert_digit(IN num CHAR(1)) RETURNS VARCHAR(2) BEGIN CASE num WHEN '0' THEN RETURN '零'; WHEN '1' THEN RETURN '壹'; WHEN '2' THEN RETURN '贰'; WHEN '3' THEN RETURN '叁'; WHEN '4' THEN RETURN '肆'; WHEN '5' THEN RETURN '伍'; WHEN '6' THEN RETURN '陆'; WHEN '7' THEN RETURN '柒'; WHEN '8' THEN RETURN '捌'; WHEN '9' THEN RETURN '玖'; END CASE; END$$ -- 数字单位 CREATE FUNCTION _convert_unit(IN num INT) RETURNS VARCHAR(2) BEGIN CASE num WHEN 1 THEN RETURN '元'; WHEN 2 THEN RETURN '拾'; WHEN 3 THEN RETURN '佰'; WHEN 4 THEN RETURN '仟'; WHEN 5 THEN RETURN '万'; WHEN 6 THEN RETURN '拾'; WHEN 7 THEN RETURN '佰'; WHEN 8 THEN RETURN '仟'; WHEN 9 THEN RETURN '亿'; WHEN 10 THEN RETURN '拾'; WHEN 11 THEN RETURN '佰'; WHEN 12 THEN RETURN '仟'; ELSE RETURN ''; END CASE; END$$ DELIMITER ; ``` 该函数将数字中文大写金额字符串,并支持负数和小数。你可以将需要换的数字作为参数传递给该函数。例如: ```sql SELECT convert_to_chinese(123456789.12) AS amount; ``` 该语句数字 `123456789.12` 中文大写金额字符串,并将结果存储在 `amount` 字段中。结果为 `"壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分"`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值