用TranSql 實現大小寫轉換

--======================================================================
--
-- SQL Source File -- Created with Huangju
--
-- NAME: 金額單位轉換
--
-- AUTHOR: HuangJu.MeiZhou.Gmcc
-- DATE  : 2006-1-27
-- Parameters:@Letter 位
-- COMMENT: 金額單位轉換
--
--======================================================================

CREATE FUNCTION GetUnit (@Letter int) 
RETURNS  varchar(10)
AS 
BEGIN

 return case @Letter
   when -2 then '分'
   when -1 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 10 then '十'
   when 11 then '佰'
       end

END


--======================================================================
--
-- SQL Source File -- Created with Huangju
--
-- NAME: 數字轉換爲大寫
--
-- AUTHOR: HuangJu.MeiZhou.Gmcc
-- DATE  : 2006-1-27
-- Parameters:@Letter 數字
-- COMMENT: 數字轉換爲大寫
--
--======================================================================

CREATE FUNCTION GetUpper (@Letter varchar(1)) 
RETURNS  varchar(10)
AS 
BEGIN

 return case @Letter
   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

END


--======================================================================
--
-- SQL Source File -- Created with Huangju
--
-- NAME: 金額轉換大寫
--
-- AUTHOR: HuangJu.MeiZhou.Gmcc
-- DATE  : 2006-1-27
-- Parameters:@Letter 金額
-- COMMENT: 金額轉換大寫
--
--======================================================================

CREATE function GetUpperMoney( @money varchar(200))
returns varchar(400)
AS
begin
declare @a varchar(200),
@aa varchar(200), --整數部分
@ab varchar(200), --小數部分
@ac int,  --級數
@ad varchar(300),  --存放結果
@i int,   --循環變量
@dotIndex int  --小數點位置

set @a=@Money

if len(@a)<1
 return ''


if  ISNUMERIC(@a)<>1
 return ''


set @aa=''


if PatIndex('%.%',@a)=0
 set @a=@a+'.00'

 

set @dotIndex =  PatIndex('%.%',@a)

 

set @aa=left(@a,@dotIndex-1)

declare @strf varchar(20)
set @strf = substring(@a,patindex('%.%',@a)+1,3)
select @strf =cast('0.'+@strf as decimal(20,2))
set @ab = right(@strf,2)

set @ad=''

---------------------------處理整數部分  開始-----------------------------------
set @i=1
set @ac=len(@aa)

while @i<=len(@aa)
begin

 if substring(@aa,@i,1)='0'
 begin
  if substring(@aa,@i-1,1) <>'0'
   set @ad= @ad +[dbo].[GetUpper](substring(@aa,@i,1))  

 end
 else
 begin
  set @ad= @ad +[dbo].[GetUpper](substring(@aa,@i,1))  
  set @ad =@ad +[dbo].[GetUnit](@ac)
 end
 set @ac=@ac-1
 set @i=@i+1
end
---------------------------處理整數部分  結束-----------------------------------

---------------------------處理小數部分  開始-----------------------------------

set @ad= @ad + dbo.GetUpper(left(@ab,1))
set @ad =@ad + dbo.GetUnit(-1)
set @ad= @ad + dbo.GetUpper(right(@ab,1))
set @ad =@ad + dbo.GetUnit(-2)
---------------------------處理小數部分  結束-----------------------------------

return @ad

END

 

 

 


發佈了25 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章