将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)

None.gif alter   function  ConvertNumberToChinese(@  varchar ( 100 ))
None.gif
returns   varchar ( 100 )
None.gif
as
None.gif
begin
None.gif
-- declare @ varchar(100)
None.gif--
set @ = '101140101031013'
None.gif
declare  @s  varchar ( 100 )
None.gif
set  @s  =   ''
None.gif
None.gif
declare  @p  integer
None.gif
set  @p  =   0
None.gif
None.gif
declare  @m  integer
None.gif
set  @m  =   len (@)  %   4
None.gif
None.gif
declare  @k  integer
None.gif
set  @k  =   len (@) / 4
None.gif
None.gif
select  @k  =  @k  +   1
None.gif 
where  @m  >   0
None.gif
None.gif
declare  @i  integer
None.gif
set  @i  =  @k
None.gif
None.gif
while  (@i  >   0 )
None.gif
begin   -- outer
None.gif
    declare  @L  integer
None.gif   
set  @L  =   4
None.gif
None.gif   
select  @L  =  @m
None.gif    
where  @i  =  @k  and  @m  !=   0
None.gif
None.gif   
declare  @ss  varchar ( 4 )
None.gif   
set  @ss  =   substring (@,@p + 1 ,@L)
None.gif
None.gif   
declare  @ll  integer
None.gif   
set  @ll  =   len (@ss)
None.gif
None.gif   
-- inner
None.gif
    declare  @j  integer
None.gif   
set  @j  =   0
None.gif
None.gif   
while  (@j  <  @ll)  -- inner
None.gif
    begin   -- inner
None.gif
       declare  @n  integer
None.gif      
set  @n  =   cast ( substring (@ss,@j + 1 , 1 as   integer )
None.gif
None.gif      
declare  @num  varchar ( 2 )   
None.gif      
select  @num  =  Num
None.gif        
from  (
None.gif              
select   0   as  id, ' '   as  Num
None.gif              
union   all   select   1 , ' '
None.gif              
union   all   select   2 , ' '
None.gif              
union   all   select   3 , ' '
None.gif              
union   all   select   4 , ' '
None.gif              
union   all   select   5 , ' '
None.gif              
union   all   select   6 , ' '
None.gif              
union   all   select   7 , ' '
None.gif              
union   all   select   8 , ' '
None.gif              
union   all   select   9 , ' '
None.gif             ) Nums
None.gif      
where  id  =  @n
None.gif
None.gif      
if  @n  =   0
None.gif      
begin
None.gif         
select  @s  =  @s  +  @num
None.gif          
where  @j  <  @ll  -   1
None.gif                
and   cast ( substring (@ss,(@j + 1 ) + 1 , 1 as   integer >   0
None.gif                
and   right (@ss, 1 !=  @num
None.gif      
end
None.gif      
else
None.gif      
begin
None.gif         
declare  @jj  integer
None.gif         
set  @jj  =   1
None.gif
None.gif         
select  @jj  =  @j  -   1
None.gif          
where  @j  >   1
None.gif
None.gif         
select  @s  =  @s  +  @num
None.gif          
where   not  (@n  =   1
None.gif                     
and  @j  =  @ll  -   2
None.gif                     
and  ( len (@s)  =   0
None.gif                          
or   right (@s, 1 =   ' '
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*
InBlock.gif                                           (   select Num
InBlock.gif                                                from
InBlock.gif                                               (
InBlock.gif                                                select 0 as id,'零' as Num
InBlock.gif                                                union all select 1,'壹'
InBlock.gif                                                union all select 2,'贰'
InBlock.gif                                                union all select 3,'叁'
InBlock.gif                                                union all select 4,'肆'
InBlock.gif                                                union all select 5,'伍'
InBlock.gif                                                union all select 6,'陆'
InBlock.gif                                                union all select 7,'柒'
InBlock.gif                                                union all select 8,'捌'
InBlock.gif                                                union all select 9,'玖'
InBlock.gif                                               ) Nums
InBlock.gif                                               where id = 0
InBlock.gif                                           )
ExpandedBlockEnd.gif
*/

None.gif                                           )
None.gif                         )
None.gif
None.gif         
select  @s  =  @s  +  digit
None.gif           
from  (
None.gif                 
select   0   as  id, ''   as  digit
None.gif                 
union   all   select   1 , ' '
None.gif                 
union   all   select   2 , ' '
None.gif                 
union   all   select   3 , ' '
None.gif                ) digits
None.gif          
where  id  =  @ll  -  @j  -   1
None.gif
None.gif      
end
None.gif      
set  @j  =  @j  +   1   -- inner
None.gif
    end   -- inner
None.gif
    set  @p  =  @p  +  @L
None.gif
None.gif   
declare  @unit  varchar ( 10 )
None.gif   
select  @unit  =  Unit
None.gif     
from  (
None.gif           
select   0   as  id, ''   as  Unit
None.gif           
union   all   select   1 , ' [万] '
None.gif           
union   all   select   2 , ' [亿] '
None.gif           
union   all   select   3 , ' [万亿] '
None.gif          ) Units
None.gif    
where  id  =  @i  -   1
None.gif
None.gif   
if  @i  <  @k
None.gif   
begin
None.gif      
select  @s  =  @s  +  @unit
None.gif       
where   cast (@ss  as   integer !=   0
None.gif   
end
None.gif   
else
None.gif   
begin
None.gif      
set  @s  =  @s  +  @unit
None.gif   
end
None.gif   
set  @i  =  @i  -   1   --  outer
None.gif
end   -- out
None.gif
return  @s
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*
InBlock.gif--Test:
InBlock.gifselect dbo.ConvertNumberToChinese('1011111112101013')
InBlock.gif,dbo.ConvertNumberToChinese('40000000001')
InBlock.gif,dbo.ConvertNumberToChinese('400000010000')
InBlock.gif,dbo.ConvertNumberToChinese('40101031013')
InBlock.gif,dbo.ConvertNumberToChinese('101140101031013')
InBlock.gif,dbo.ConvertNumberToChinese('100000001000003')
InBlock.gif,dbo.ConvertNumberToChinese('10011003')
InBlock.gif,dbo.ConvertNumberToChinese('10010103')
InBlock.gif,dbo.ConvertNumberToChinese('10010013')
ExpandedBlockEnd.gif
*/

None.gif
end

转载于:https://www.cnblogs.com/xiongeee/archive/2006/12/08/585960.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值