主題 小寫金額轉換成大寫 sql server

2021-08-22 19:51:52 字數 3237 閱讀 3242

if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[l2u]') and xtype in (n'fn', n'if', n'tf'))

drop function [dbo].[l2u]

gocreate function dbo.l2u(@n_lowermoney numeric(15,2),@v_transtype int)

returns varchar(200) as

begin

declare @v_lowerstr varchar(200) -- 小寫金額

declare @v_upperpart varchar(200)

declare @v_upperstr varchar(200) -- 大寫金額

declare @i_i int

set @v_lowerstr = ltrim(rtrim(round(@n_lowermoney,2))) --四捨五入為指定的精度並刪除資料左右空格

set @i_i = 1

set @v_upperstr = ''

while ( @i_i <= len(@v_lowerstr))

begin

select @v_upperpart = case substring(@v_lowerstr,len(@v_lowerstr) - @i_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_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 ''

endset @v_upperstr = @v_upperpart + @v_upperstr

set @i_i = @i_i + 1

endif ( 0 = @v_transtype)

begin

set @v_upperstr = replace(@v_upperstr,'零拾','零')

set @v_upperstr = replace(@v_upperstr,'零佰','零')

set @v_upperstr = replace(@v_upperstr,'零仟','零')

set @v_upperstr = replace(@v_upperstr,'零零零','零')

set @v_upperstr = replace(@v_upperstr,'零零','零')

set @v_upperstr = replace(@v_upperstr,'零角零分','整')

set @v_upperstr = replace(@v_upperstr,'零分','整')

set @v_upperstr = replace(@v_upperstr,'零角','零')

set @v_upperstr = replace(@v_upperstr,'零億零萬零元','億元')

set @v_upperstr = replace(@v_upperstr,'億零萬零元','億元')

set @v_upperstr = replace(@v_upperstr,'零億零萬','億')

set @v_upperstr = replace(@v_upperstr,'零萬零元','萬元')

set @v_upperstr = replace(@v_upperstr,'萬零元','萬元')

set @v_upperstr = replace(@v_upperstr,'零億','億')

set @v_upperstr = replace(@v_upperstr,'零萬','萬')

set @v_upperstr = replace(@v_upperstr,'零元','元')

set @v_upperstr = replace(@v_upperstr,'零零','零')

end-- 對壹元以下的金額的處理

if ( '元' = substring(@v_upperstr,1,1))

begin

set @v_upperstr = substring(@v_upperstr,2,(len(@v_upperstr) - 1))

endif ( '零' = substring(@v_upperstr,1,1))

begin

set @v_upperstr = substring(@v_upperstr,2,(len(@v_upperstr) - 1))

endif ( '角' = substring(@v_upperstr,1,1))

begin

set @v_upperstr = substring(@v_upperstr,2,(len(@v_upperstr) - 1))

endif ( '分' = substring(@v_upperstr,1,1))

begin

set @v_upperstr = substring(@v_upperstr,2,(len(@v_upperstr) - 1))

endif ('整' = substring(@v_upperstr,1,1))

begin

set @v_upperstr = '零元整'

endreturn @v_upperstr

endgo

select dbo.l2u(12.93,1),dbo.l2u(12.93,0)

小寫金額轉換成大寫

原作在sql 2000中有一些問題。修正錯誤並在sql 2000中執行通過。set nocount on select v lowerstr ltrim rtrim str n lowermoney,20,2 四捨五入為指定的精度並刪除資料左右空格 select i i 1 select v upp...

小寫金額轉換成大寫 sql server

if exists select from dbo.sysobjects where id object id n dbo l2u andxtype in n fn n if n tf drop function dbo l2u go create function dbo.l2u n lowerm...

小寫金額轉換成大寫 sql server

if exists select from dbo.sysobjects where id object id n dbo l2u andxtype in n fn n if n tf drop function dbo l2u go create function dbo.l2u n lowerm...