Sql Server 中將數字轉換為大寫金額


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_numToUpper](@n_LowerMoney numeric(15,2))
RETURNS varchar(200)
AS
BEGIN
  Declare @v_LowerStr VARCHAR(200) -- 小寫金額 
  Declare @v_UpperPart VARCHAR(200) 
  Declare @v_UpperStr VARCHAR(200) -- 大寫金額
  Declare @i_I int

  --四舍五入為指定的精度並刪除數據左右空格
  select @v_LowerStr = LTRIM(RTRIM(STR(@n_LowerMoney,20,2))) ,@i_I = 1,@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  '玖'
                            WHEN  '-' 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 ''
                            END
     select @v_UpperStr = @v_UpperPart + @v_UpperStr
     select @i_I = @i_I + 1
  end

  select @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零') 
  select @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零') 
  select @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零') 
  select @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零億零萬零元','億元')
  select @v_UpperStr = REPLACE(@v_UpperStr,'億零萬零元','億元')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零億零萬','億')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零萬零元','萬元')
  select @v_UpperStr = REPLACE(@v_UpperStr,'萬零元','萬元')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零億','億')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零萬','萬')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
  select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
  
  --特殊處理負數  負仟肆佰叄拾元整
  select @v_UpperStr = REPLACE(@v_UpperStr,'負分',' ') 
  select @v_UpperStr = REPLACE(@v_UpperStr,'負角',' ') 
  select @v_UpperStr = REPLACE(@v_UpperStr,'負拾','負') 
  select @v_UpperStr = REPLACE(@v_UpperStr,'負佰','負')
  select @v_UpperStr = REPLACE(@v_UpperStr,'負仟','負')
  select @v_UpperStr = REPLACE(@v_UpperStr,'負萬','負')

  -- 對壹元以下的金額的處理 
  if ( substring(@v_UpperStr,1,1)='元' )
  begin
	   select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
  end

  if (substring(@v_UpperStr,1,1)= '零')
  begin
	   select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
  end

  if (substring(@v_UpperStr,1,1)='角')
  begin
	   select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
  end

  if ( substring(@v_UpperStr,1,1)='分')
  begin
	   select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
  end
  if (substring(@v_UpperStr,1,1)='整')
  begin
	   select @v_UpperStr = '零元整'
  end
  RETURN (@v_UpperStr)
end

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM