阿拉伯数字转英文

create function decodehundred( @hundredstring varchar ( 300 ) ) returns   varchar ( 1000 ) as begin declare   @tmp varchar ( 1000 ), @decodehundred varchar ( 1000 ) set @decodehundred = '' declare @strno1 varchar ( 1000 ) select   @strno1 = ' One       Two       Three     Four      Five      ' +                   ' Six       Seven     Eight     Nine      Ten       ' +                   ' Eleven    Twelve    Thirteen  Fourteen  Fifteen   ' +                   ' Sixteen   Seventeen Eighteen  Nineteen  ' declare @strtens1 varchar ( 1000 ) set @strtens1 =    ' Ten       Twenty    Thirty    Forty     Fifty     ' +                   ' Sixty     Seventy   Eighty    Ninety    ' declare @unit4   varchar ( 10 ) set @unit4 = ' Hundred ' if len ( @hundredstring ) > 0 and len ( @hundredstring ) <= 3   begin          if len ( @hundredstring ) = 1     begin         set @tmp = cast ( @hundredstring as int )         if @tmp <> 0               set @decodehundred =                rtrim ( substring ( @strno1 ,( @tmp - 1 ) * 10 + 1 , 10 ))     end     if len ( @hundredstring ) = 2     begin         set @tmp = cast ( @hundredstring as int )         if @tmp <> 0                if @tmp < 20                   if @tmp < 10                     set @decodehundred = ' Zero ' + rtrim ( substring ( @strno1 ,( @tmp - 1 ) * 10 + 1 , 10 ))                 else                     set @decodehundred =                     rtrim ( substring ( @strno1 ,( @tmp - 1 ) * 10 + 1 , 10 ))             else                 if cast ( right ( @hundredstring , 1 ) as int ) = 0                        set @decodehundred = rtrim ( substring ( @strtens1 ,( @tmp / 10 - 1 ) * 10 + 1 , 10 ))                 else                     set @decodehundred =   rtrim ( substring ( @strtens1 ,( @tmp / 10 - 1 ) * 10 + 1 , 10 ))                          + ' - ' + rtrim ( substring ( @strno1 ,( cast ( right ( @hundredstring , 1 ) as int ) - 1 ) * 10 + 1 , 10 ))     end     if len ( @hundredstring ) =   3     begin         if cast ( left ( @hundredstring , 1 ) as int ) <> 0             set @decodehundred = rtrim ( substring ( @strno1 ,( cast ( left ( @hundredstring , 1 ) as int ) - 1 ) * 10 + 1 , 10 ))             + ' ' + @unit4 + ' ' + dbo.decodehundred( right ( @hundredstring , 2 ))         else             set @decodehundred = dbo.decodehundred( right ( @hundredstring , 2 ))              end end return @decodehundred end go create function f_numbertostring( @number as numeric( 12 , 2 )) returns varchar ( 1000 ) as begin declare   @str varchar ( 100 ), @beforepoint varchar ( 100 ), @afterpoint varchar ( 100 ), @tmpstr varchar ( 100 ), @numbertostring varchar ( 200 ) declare   @point int , @nnumlen int declare   @nbit    integer declare   @curstring varchar ( 100 ) set @numbertostring = '' declare @unit1    varchar ( 1000 ) set @unit1 = ' Thousand  Million   Billion   Hundred   Only      Point     *          And       ' set @str = cast ( round ( @number , 2 ) as varchar ) if charindex ( ' . ' , @str ) = 0   begin     set @beforepoint = @str     set @afterpoint = '' end else begin     begin         set @beforepoint = left ( @str , charindex ( ' . ' , @str ) - 1 )         set @afterpoint = right ( @str , len ( @str ) - charindex ( ' . ' , @str ))     end            if len ( @beforepoint ) > 12     begin         set @numbertostring = ' Too big. '         return @numbertostring     end        set @str = ''     while len ( @beforepoint ) > 0     begin         set @nnumlen = len ( @beforepoint )         if @nnumlen % 3 = 0           begin             set @curstring = left ( @beforepoint , 3 )             set @beforepoint = right ( @beforepoint , @nnumlen - 3 )         end         else         begin             set @curstring = left ( @beforepoint , ( @nnumlen % 3 ))             set @beforepoint = right ( @beforepoint , @nnumlen - ( @nnumlen % 3 ))         end            set @nbit = len ( @beforepoint ) / 3         set @tmpstr = dbo.decodehundred( @curstring )         if ( @beforepoint = REPLICATE ( ' 0 ' , len ( @beforepoint )) or @nbit = 0 ) and len ( @curstring ) = 3                if cast ( left ( @curstring , 1 ) as int ) <> 0 and cast ( right ( @curstring , 2 ) as int ) <> 0                    set @tmpstr = left ( @tmpstr , charindex ( ' Hundred ' , @tmpstr ) + len ( ' Hundred ' )) + ' And ' +                           right ( @tmpstr , len ( @tmpstr ) - ( charindex ( ' Hundred ' , @tmpstr ) + 7 ))             else if cast ( left ( @curstring , 1 ) as int ) <> 0 and cast ( right ( @curstring , 2 ) as int ) = 0                    set @tmpstr = ' And ' + @tmpstr                  if @nbit = 0                set @str = ltrim ( @str + ' ' + @tmpstr )         else                         set @str = ltrim ( @str + ' ' + @tmpstr + ' ' +                        rtrim ( substring ( @unit1 ,( @nbit - 1 ) * 10 + 1 , 10 )))                  if left ( @str , 3 ) = ' And '             set @str = ltrim ( right ( @str , len ( @str ) - 3 ))         if @beforepoint = REPLICATE ( ' 0 ' , len ( @beforepoint ))              break         end     set @beforepoint = replace ( @str , ' * ' , ' ' )         if len ( @afterpoint ) > 0            set @afterpoint = ' Point ' + ' ' + dbo.decodehundred( @afterpoint ) + ' ' -- + @unit7     else         set @afterpoint = ' Only '     set @numbertostring = replace ( @beforepoint , ' Zero ' , '' ) + ' ' + @afterpoint end set @numbertostring = ltrim ( rtrim ( @numbertostring )) if right ( @numbertostring , 5 ) = ' point '    set @numbertostring = replace ( @numbertostring , ' point ' , '' ) return @numbertostring end go select dbo.f_numbertostring( 12223.01 ) /* ------------------------------------ one hundred and twenty-three (所影响的行数为 1 行) */ select dbo.f_numbertostring( 100001000 ) /* ------------------------------------ twelve thousand three hundred and one (所影响的行数为 1 行) */ drop function decodehundred,f_numbertostring
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值