一
create function UpperRMB(@num numeric(14,2))
- returns @rmb table(
- 億 varchar(2)
- ,仟萬 varchar(2)
- ,佰萬 varchar(2)
- ,拾萬 varchar(2)
- ,萬 varchar(2)
- ,仟 varchar(2)
- ,佰 varchar(2)
- ,拾 varchar(2)
- ,元 varchar(2)
- ,角 varchar(2)
- ,分 varchar(2))
- as
- begin
- insert into @rmb
- select
- (case 億1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 億,
- (case 仟萬1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 仟萬,
- (case 佰萬1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 佰萬,
- (case 拾萬1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 拾萬,
- (case 萬1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 萬,
- (case 仟1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 仟,
- (case 佰1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 佰,
- (case 拾1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 拾,
- (case 元1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 元,
- (case 角1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 角,
- (case 分1
- when 0 then '零'
- when 1 then '壹'
- when 2 then '貳'
- when 3 then '叄'
- when 4 then '肆'
- when 5 then '伍'
- when 6 then '陸'
- when 7 then '柒'
- when 8 then '捌'
- when 9 then '玖'
- else '' end) as 分
- from (
- select
- case when len(ltrim(str(@num*100,14)))>=11
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),11),1) ) else null end as 億1,
- case when len(ltrim(str(@num*100,14)))>=10
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),10),1) ) else null end as 仟萬1,
- case when len(ltrim(str(@num*100,14)))>=9
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),9),1) ) else null end as 佰萬1,
- case when len(ltrim(str(@num*100,14)))>=8
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),8),1) ) else null end as 拾萬1,
- case when len(ltrim(str(@num*100,14)))>=7
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),7),1) ) else null end as 萬1,
- case when len(ltrim(str(@num*100,14)))>=6
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),6),1) ) else null end as 仟1,
- case when len(ltrim(str(@num*100,14)))>=5
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),5),1) ) else null end as 佰1,
- case when len(ltrim(str(@num*100,14)))>=4
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),4),1) ) else null end as 拾1,
- case when len(ltrim(str(@num*100,14)))>=3
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),3),1) ) else null end as 元1,
- case when len(ltrim(str(@num*100,14)))>=2
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),2),1) ) else null end as 角1,
- case when len(ltrim(str(@num*100,14)))>=1
- then convert(varchar(10),left(right(ltrim(str(@num*100,14)),1),1) ) else null end as 分1
- ) kk
- return
- end
- /*
- select * from upperrmb(123456789.12)
- select 億+'億'+仟萬+'仟'+佰萬+'佰'+拾萬+'拾'+萬+'萬'+仟+'仟'+佰+'佰'+拾+'拾'+元+'元'+角+'角'+分+'分' AS [人民幣大寫]
- from upperrmb(123456789.12)
- --其實單位也可以在函數內設定
- */
- CREATE function dbo.toUppercaseRMB ( @LowerMoney decimal(18,4))
- returns varchar(200)
- as
- begin
- declare @lowerStr varchar(200)
- declare @UpperStr varchar(200)
- declare @UpperPart varchar(200) --長度
- declare @i int
- set @lowerStr=ltrim(rtrim(convert(decimal(18,2),round(@LowerMoney,2))))
- set @i=1
- set @UpperStr=''
- while(@i<=len(@lowerStr))
- begin
- select @UpperPart=
- case substring(@lowerStr,len(@lowerStr)-@i+1,1)--取最后一位數
- when '.' then '元'
- when '0' then '零'
- when '1' then '壹'
- when '2' then '貳'
- when '3' then '叄'
- when '4' then '肆'
- when '5' then '伍'
- when '6' then '陸'
- when '7' then '柒'
- when '8' then '捌'
- when '9' then '玖'
- end
- +
- case @i
- when 1 then '分'
- when 2 then '角'
- when 3 then ''
- when 4 then ''
- when 5 then '拾'
- when 6 then '佰'
- when 7 then '仟'
- when 8 then '萬'
- when 9 then '拾'
- when 10 then '佰'
- when 11 then '仟'
- when 12 then '億'
- when 13 then '拾'
- when 14 then '佰'
- when 15 then '仟'
- when 16 then '萬'
- else ''
- end
- set @UpperStr=@UpperPart+@UpperStr
- set @i=@i+1
- end
- set @UpperStr = REPLACE(@UpperStr,'零拾','零')
- set @UpperStr = REPLACE(@UpperStr,'零佰','零')
- set @UpperStr = REPLACE(@UpperStr,'零仟零佰零拾','零')
- set @UpperStr = REPLACE(@UpperStr,'零仟','零')
- set @UpperStr = REPLACE(@UpperStr,'零零零','零')
- set @UpperStr = REPLACE(@UpperStr,'零零','零')
- set @UpperStr = REPLACE(@UpperStr,'零角零分','')
- set @UpperStr = REPLACE(@UpperStr,'零分','')
- set @UpperStr = REPLACE(@UpperStr,'零角','零')
- set @UpperStr = REPLACE(@UpperStr,'零億零萬零元','億元')
- set @UpperStr = REPLACE(@UpperStr,'億零萬零元','億元')
- set @UpperStr = REPLACE(@UpperStr,'零億零萬','億')
- set @UpperStr = REPLACE(@UpperStr,'零萬零元','萬元')
- set @UpperStr = REPLACE(@UpperStr,'萬零元','萬元')
- set @UpperStr = REPLACE(@UpperStr,'零億','億')
- set @UpperStr = REPLACE(@UpperStr,'零萬','萬')
- set @UpperStr = REPLACE(@UpperStr,'零元','元')
- set @UpperStr = REPLACE(@UpperStr,'零零','零')
- if left(@UpperStr,1)='元'
- set @UpperStr = REPLACE(@UpperStr,'元','零元')
- return @UpperStr+'整'
- end
- -- SELECT DBO.TOUPPERCASERMB(123456.789)
