金額阿拉伯數字轉換為中文的儲存過程

2021-04-07 00:17:56 字數 3686 閱讀 6217

create procedure atoc

@changemoney money 

as set nocount on

declare @string1 char(20)

declare @string2 char(30)

declare @string4 varchar(100)

declare @string3 varchar(100) --從原a值中取出的值

declare @i int --迴圈變數

declare @j int --a的值乘以100的字串長度

declare @ch1 varchar(100) --數字的漢語讀法

declare @ch2 varchar(100) --數字位的漢字讀法

declare @zero int --用來計算連續有幾個零

declare @returnvalue varchar(100)

select @returnvalue = ''

select @string1 = '零壹貳叄肆伍陸柒捌玖'

select @string2 = '萬仟佰拾億仟佰拾萬仟佰拾元角分'

select @string4 = cast(@changemoney*100 as int) 

select @j=len(cast((@changemoney*100) as int))

select @string2=right(@string2,@j)

select @i = 1 

while @i<= @j begin

select @string3 = substring(@string4,@i,1)

if @string3<>'0' begin

select @ch1 = substring(@string1, cast(@string3 as int) + 1, 1)

select @ch2 = substring(@string2, @i, 1)

select @zero = 0 --表示本位不為零

end

else begin

if (@zero = 0) or (@i = @j - 9) or (@i = @j - 5) or (@i = @j - 1)

select @ch1 = '零' 

else

select @ch1 = ''

select @zero = @zero + 1 --表示本位為0

--如果轉換的數值需要擴大,那麼需改動以下表示式 i 的值。

select ch2 = ''

if @i = @j - 10 begin

select @ch2 = '億'

select @zero = 0

end

if @i = @j - 6 begin

select @ch2 = '萬'

select @zero = 0

end

if @i = @j - 2 begin

select @ch2 = '元'

select @zero = 0

end

if @i = @j 

select @ch2 = '整'

end 

select @returnvalue = @returnvalue + @ch1 + @ch2

select @i = @i+1

end

--最後將多餘的零去掉

if charindex('仟仟',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '仟仟', '仟')

if charindex('佰佰',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '佰佰', '佰')

if charindex('零元',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '零元', '元')

if charindex('零萬',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '零萬', '萬')

if charindex('零億',@returnvalue) <> 0

select @returnvalue = replace(@returnvalue, '零億', '億')

if charindex('零整',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '零整', '整')

if charindex('零佰',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '零佰', '零')

if charindex('零仟',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '零仟', '零')

if charindex('元元',@returnvalue) <> 0 

select @returnvalue = replace(@returnvalue, '元元', '元')

select @returnvalue 

go 

完函式:

set @n_data=right(space(14)+cast(cast(abs(@num*100) as bigint) as varchar(20)),14)

set @c_data=''

set @i=1

while @i<=14

begin

set @n_str=substring(@n_data,@i,1)

if @n_str<>' '

begin

if not ((substring(@n_data,@i,2)='00') or

((@n_str='0') and ((@i=4) or (@i=8) or (@i=12) or (@i=14))))

set @c_data=@c_data+substring('零壹貳叄肆伍陸柒捌玖',cast(@n_str as int)+1,1)

if not ((@n_str='0') and (@i<>4) and (@i<>8) and (@i<>12))

set @c_data=@c_data+substring('仟佰拾億仟佰拾萬仟佰拾圓角分',@i,1)

if substring(@c_data,len(@c_data)-1,2)='億萬'

set @c_data=substring(@c_data,1,len(@c_data)-1)

endset @i=@i+1

endif @num<0

set @c_data='(負數)

'+@c_data

if @num=0

set @c_data='零圓'

if @n_str='0'

set @c_data=@c_data+'整'

return(@c_data)

end

阿拉伯數字金額轉換為中文大寫

set ansi nulls on goset quoted identifier on gocreate procedure dbo moneytochinese 阿拉伯數字金額轉換為中文大寫 changemoney money returndaxie varchar 50 output asse...

金額阿拉伯數字轉換為中文的儲存過程

create procedure atoc changemoney money asset nocount on declare string1 char 20 declare string2 char 30 declare string4 varchar 100 declare string3 v...

金額阿拉伯數字轉換為中文的儲存過程

create procedure atoc changemoney money asset nocount on declare string1 char 20 declare string2 char 30 declare string4 varchar 100 declare string3 v...

阿拉伯數字轉換為中文數字

首先,如果在數字中有小數部分,那麼直接從末尾開始將小數部分的每一位轉換為中文,即 20 28行所示,最後需要增加一個 點 字。然後,從小數點左邊的低位到高位四位四位地進行轉換,如 34 51行所示。flag是0位數的計數,如果當前四位全是0那麼不需要每四位的單位,如 萬 億 兆 等,見52 53行。...

中文數字轉換為阿拉伯數字

需求 1 2 今天寫了三千二百行 今天寫了3200行 兩行意思相同,只是表達方式不太能夠,統一掉。原理 數字的特徵是數字 單位,例如三百,四十二,九千零二 可以從後往前遍歷,遇到的是0到9的數字,就乘以前一位的單位,遇到新的單位 十百千萬 就替換成數字供下一個數字用。舉例 1 2 3 4 5 6 五...