zoukankan      html  css  js  c++  java
  • SQL转换数字中文大写

    1.--------------------------
    ALTER Function [dbo].[fn_LowerToUpperMoney](@num   numeric(14,2))  
      RETURNS   nvarchar(100)   WITH   ENCRYPTION  
      AS  
      BEGIN  
          DECLARE   @n_data   nVARCHAR(20),@c_data   nVARCHAR(100),@n_str   nVARCHAR(10),@i   int  

          SET   @n_data=RIGHT(SPACE(14)+CAST(CAST(ABS(@num*100)   AS   bigint)   AS   varchar(20)),14)  
          SET   @c_data=''  
          SET   @i=1  
          WHILE   @i<=14  
          BEGIN  
              SET   @n_str=SUBSTRING(@n_data,@i,1)  
              IF   @n_str<>'   '  
              BEGIN  
                  IF   not   ((SUBSTRING(@n_data,@i,2)='00')   or  
                      ((@n_str='0')   and   ((@i=4)   or   (@i=8)   or   (@i=12)   or   (@i=14))))  
                      SET   @c_data=@c_data+SUBSTRING(N'零壹贰叁肆伍陆柒捌玖',CAST(@n_str   AS   int)+1,1)  
                  IF   not   ((@n_str='0')   and   (@i<>4)   and   (@i<>8)   and   (@i<>12))  
                      SET   @c_data=@c_data+SUBSTRING(N'仟佰拾亿仟佰拾万仟佰拾元角分',@i,1)  
                  IF   SUBSTRING(@c_data,LEN(@c_data)-1,2)=N'亿万'  
                      SET   @c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)  
              END  
              SET   @i=@i+1  
          END  
          IF   @num<0  
              SET   @c_data=N'(负数)'+@c_data  
          IF   @num=0  
              SET   @c_data=N'零元'  
          IF   @n_str='0'  
              SET   @c_data=@c_data+N'整'  
          RETURN(@c_data)  
      END

    2.-----------------------

    ALTER Function [dbo].[fn_LowerToUpperMoney](@ChangeMoney Numeric(15,2))
    returns nvarchar(200) as
    begin
    Declare @String1 char(20)
    Declare @String2 char(30)
    Declare @String4 Varchar(100)
    Declare @String3 Varchar(100) --从原A值中取出的值
    Declare @i bigint --循环变量
    Declare @J bigint --A的值乘以100的字符串长度
    Declare @Ch1 Varchar(100) --数字的汉语读法
    Declare @Ch2 Varchar(100) --数字位的汉字读法
    Declare @Zero bigint --用来计算连续有几个零
    Declare @ReturnValue VarChar(100)

    Select @ReturnValue = ''
    Select @String1 = '零壹贰叁肆伍陆柒捌玖'
    Select @String2 = '万仟佰拾亿仟佰拾万仟佰拾元角分'

    Select @String4 = Cast(@ChangeMoney*100 as bigint)

    select @J=len(cast((@ChangeMoney*100) as bigint))

    Select @String2=Right(@String2,@J)

    Select @i = 1

    while @i<= @j Begin

    Select @String3 = Substring(@String4,@i,1)

    if @String3<>'0' Begin

    Select @Ch1 = Substring(@String1, Cast(@String3 as bigint) + 1, 1)
    Select @Ch2 = Substring(@String2, @i, 1)
    Select @Zero = 0 --表示本位不为零
    end
    else Begin
    If (@Zero = 0) Or (@i = @J - 9) Or (@i = @J - 5) Or (@i = @J - 1)
    Select @Ch1 = '零'
    Else
    Select @Ch1 = ''

    Select @Zero = @Zero + 1 --表示本位为0

    --如果转换的数值需要扩大,那么需改动以下表达式 I 的值。


    If @i = @J - 10 Begin
    Select @Ch2 = '亿'
    Select @Zero = 0
    end

    If @i = @J - 6 Begin
    Select @Ch2 = '万'
    Select @Zero = 0
    end

    if @i = @J - 2 Begin
    Select @Ch2 = '元'
    Select @Zero = 0
    end

    If @i = @J
    Select @Ch2 = '整'

    end

    Select @ReturnValue = @ReturnValue + @Ch1 + @Ch2

    select @i = @i+1
    end

    --最后将多余的零去掉
    If CharIndex('仟仟',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '仟仟', '仟')

    If CharIndex('佰佰',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '佰佰', '佰')

    If CharIndex('零元',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '零元', '元')

    If CharIndex('零万',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '零万', '万')

    If CharIndex('零亿',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '零亿', '亿')

    If CharIndex('零整',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '零整', '整')

    If CharIndex('零佰',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '零佰', '零')

    If CharIndex('零仟',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '零仟', '零')

    If CharIndex('元元',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '元元', '元')

    If CharIndex('零元',@ReturnValue) <> 0
    Select @ReturnValue = Replace(@ReturnValue, '零元', '元')


    Return @ReturnValue

    end

  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/jacker1979/p/1517534.html
Copyright © 2011-2022 走看看