小写金额转换成大写金额

/*******************************************************************************************
    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 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ycmail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值