一个取出数字某一位转化为大写的函数
利用报表工具打印发票的时候常常遇到发票格式已经固定好,如 ×万×千×百×拾×元×角×分(其中×是要填写数字大写的地方)。
多年前写了个函数来解决这个问题,说明如下
[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
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) 收藏 举报

浙公网安备 33010602011771号