/*******************************************************************************************
Name : Fun_GetRMB
Descr : 大写金额转换
Params : @Num 金额小写
Returns: 转换后大写金额
Examp : SELECT dbo.Fun_GetRMB(1000000200034.56)
********************************************************************************************/
ALTER FUNCTION Fun_GetRMB(@Num NUMERIC(18,2))
RETURNS NVARCHAR(30)
AS
BEGIN
DECLARE @Str1 NVARCHAR(10), --0-9所对应的汉字
@Str2 NVARCHAR(15), --数字位所对应的汉字
@Str3 VARCHAR(1), --从原num值中取出的值
@Str4 VARCHAR(18), --数字的字符串形式
@Str5 NVARCHAR(40), --人民币大写金额形式
@Ch1 NVARCHAR(2), --数字的汉语读法
@Ch2 NVARCHAR(1) --数字位的汉字读法
DECLARE @i INT , --循环变量
@j INT, --num的值乘以100的字符串长度
@nzero INT , --用来计算连续的零值是几个
@temp INT --从原num值中取出的值
SET @Str1='零壹贰叁肆伍陆柒捌玖'
SET @Str2='万仟佰拾亿仟佰拾万仟佰拾元角分'
SET @i=0
SET @nzero=0
SET @Str5=''
SET @Num=ROUND(ABS(@Num),2) --将num取绝对值并四舍五入取2位小数
SET @Str4 = CONVERT(DECIMAL(18,0),@Num*100) --将num乘100并转换成字符串形式
SET @j = LEN(@Str4) --找出最高位
BEGIN
SET @Str2=SUBSTRING(@Str2,(15-@j+1),LEN(@Str2)) --取出对应位数的str2的值
WHILE(@i<@j)
BEGIN
SET @Str3 = SUBSTRING(@Str4,@i+1,1)
SET @temp = CONVERT(INT,@Str3+1)
IF((@i<>(@j-3)) AND (@i<>(@j-7)) AND (@i<>(@j-11)) AND (@i<>(@j-15))) --当所取位数不为元、万、亿、万亿上的数字时
BEGIN
IF(@Str3='0')
BEGIN
SET @Ch1=''
SET @Ch2=''
SET @nzero=@nzero+1
END
ELSE IF(@Str3<>'0' AND @nzero<>0)
BEGIN
SET @Ch1='零'+SUBSTRING(@Str1,@temp*1,1)
SET @Ch2=SUBSTRING(@Str2,@i+1,1)
SET @nzero=0
END
ELSE
BEGIN
SET @Ch1=SUBSTRING(@Str1,@temp*1,1)
SET @Ch2=SUBSTRING(@Str2,@i+1,1)
SET @nzero=0
END
END
ELSE --该位是万亿,亿,万,元位等关键位
BEGIN
IF(@Str3<>'0' AND @nzero<>0)
BEGIN
SET @Ch1='零'+SUBSTRING(@Str1,@temp*1,1)
SET @Ch2=SUBSTRING(@Str2,@i+1,1)
SET @nzero=0
END
ELSE
BEGIN
IF(@Str3<>'0' AND @nzero=0)
BEGIN
SET @Ch1=SUBSTRING(@Str1,@temp*1,1)
SET @Ch2=SUBSTRING(@Str2,@i+1,1)
SET @nzero=0
END
ELSE
BEGIN
IF(@Str3='0' AND @nzero>=3)
BEGIN
SET @Ch1=''
SET @Ch2=''
SET @nzero=@nzero+1
END
ELSE
BEGIN
IF(@j>=11)
BEGIN
SET @Ch1=''
SET @nzero=@nzero+1
END
ELSE
BEGIN
SET @Ch1=''
SET @Ch2=SUBSTRING(@Str2,@i+1,1)
SET @nzero=@nzero+1
END
END
END
END
END
IF((@i=@j-11) OR (@i=@j-7) OR (@i=@j-3))
BEGIN
SET @Ch2=SUBSTRING(@Str2,@i+1,1) --如果该位是亿位、万位或元位,则必须写上
END
SET @Str5=@Str5+@Ch1+@Ch2
IF((@i=@j-1) and @Str3='0')
BEGIN
SET @Str5 = @Str5+'整' --最后一位(分)为0时,加上“整”
END
SET @i= @i+1
END
IF(@Num=0)
BEGIN
SET @Str5='零元整'
END
END
RETURN @Str5
END