阿拉伯数字转大写中文_财务常用sql存储过程

235 阅读1分钟
需求:输入阿拉伯数字,给出对应的中文大写,编写为存储过程或函数


例:输入12345,程序给出:壹万贰仟叁佰肆拾伍


例:输入10023040,程序给出:壹仟另贰万叁仟另肆拾



解决方案之一(在SqlServer2000中测试通过):


CREATE FUNCTION fun_cgnum


(@num INT)


RETURNS VARCHAR(100)


AS


BEGIN


DECLARE @temp INT,@res INT,@i TINYINT


DECLARE @str VARCHAR(100),@no VARCHAR(20),@unit VARCHAR(16)


SELECT @str='',@no='另壹贰叁肆伍陆柒捌玖',@unit='拾佰仟万拾佰仟亿'


SET @temp=@num


SELECT @i=0,@res=@temp%10,@temp=@temp/10


WHILE @temp>0


BEGIN


IF @i=0


SET @str=SUBSTRING(@no,@res+1,1)


ELSE


SET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str


SELECT @res=@temp%10,@temp=@temp/10


SET @i=@i+1


END


SET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str


SET @str=REPLACE(@str,'另拾','另')


SET @str=REPLACE(@str,'另佰','另')


SET @str=REPLACE(@str,'另仟','另')


SET @str=REPLACE(@str,'另拾','另')


SET @str=REPLACE(@str,'另万','万')


WHILE @i>0


BEGIN


SET @str=REPLACE(@str,'另另','另')


SET @i=CHARINDEX('另另',@str)


END


SET @str=REPLACE(@str,'另万','万')


SET @str=REPLACE(@str,'亿万','亿')


IF RIGHT(@str,1)='另'


SET @str=LEFT(@str,LEN(@str)-1)


RETURN @str


END


GO



--测试:有0和没有0的情况


SELECT dbo.fun_cgnum(900000000),dbo.fun_cgnum(903002051),dbo.fun_cgnum(903002050)



PS:有兴趣的朋友可以继续考虑有小数点以及添加单位(元/角/分)的情况