一个取出数字某一位转化为大写的函数

 利用报表工具打印发票的时候常常遇到发票格式已经固定好,如 ×万×千×百×拾×元×角×分(其中×是要填写数字大写的地方)。

多年前写了个函数来解决这个问题,说明如下

[L2U](@total decimal(18,2),@rindex int)
其中@total要转化的数字,@rindex是需要取得大写数字相对小数点的位数,
小数点左边是正数,右边是负数。

结果如下:

select dbo.L2U(120.5,1)

select dbo.L2U(120.5,2)

select dbo.L2U(120.5,3)

select dbo.L2U(120.5,-1)

select dbo.L2U(120.5,-2)

select dbo.L2U(120.5,0)
.

左边没有数字的第一位显示人民币符号
select dbo.L2U(120.5,4)

其他位无数字返回空字符。

 

 

取出数字中某一位转化为大写
 1 Create Function [dbo].[L2U](@total decimal(18,2),@rindex int)
 2     returns nvarchar(1)
 3 as
 4 
 5 begin
 6 
 7 declare @i int
 8 declare @tmp nvarchar(20)
 9 declare @n nvarchar(1)
10 
11 
12 
13 if(@rindex =0)
14     select @n='.'
15 else
16 begin    
17 
18 select @i=1
19 select @tmp=''
20 while(@i<=len(cast(@total as varchar(100))))
21 begin
22     select @tmp = @tmp + case substring(cast(@total as varchar(100)),@i,1
23                         when '1' then ''
24                         when '2' then ''
25                         when '3' then ''
26                         when '4' then ''
27                         when '5' then ''
28                         when '6' then ''
29                         when '7' then ''
30                         when '8' then ''
31                         when '9' then ''
32                         when '0' then ''
33                         when '.' then '.'
34                         else '' end
35     select     @i = @i + 1                
36 end
37 
38 select @tmp = '' + @tmp
39  
40 if(@rindex>0)
41     select @tmp=substring(cast(@tmp as varchar(100)),1,patindex('%.%',cast(@tmp as varchar(100)))-1)
42 
43 else    
44     select @tmp=substring(cast(@tmp as varchar(100)),patindex('%.%',cast(@tmp as varchar(100)))+1,
45                 len(cast(@tmp as varchar(100)))-patindex('%.%',cast(@tmp as varchar(100))))
46 if(@rindex>0)
47     select @n= substring(@tmp,len(@tmp)-@rindex +1  ,1)
48 else
49     select @n= substring(@tmp,abs(@rindex),1)     
50 end
51 return @n
52 end

 

posted on 2010-12-20 09:58  rO8eR70.nEt  阅读(312)  评论(0)    收藏  举报

导航