SQL 數字轉換英文函式

iSQlServer發表於2009-08-03


SQL 數字轉換英文函式
USE [WWERP]
GO
/****** 物件:  UserDefinedFunction [dbo].[fun_currencyENG]    指令碼日期: 08/02/2009 15:58:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fun_currencyENG] (@num numeric(15,2))
RETURNS varchar(400
AS
BEGIN

  
DECLARE @i int,@hundreds int,@tenth int,@one int
  
DECLARE @thousand int,@million int,@billion int
  
DECLARE @numbers varchar(400),@s varchar(15),@result varchar(400)
  
SET @numbers='ONE       TWO       THREE     FOUR      FIVE      '
              
+'SIX       SEVEN     EIGHT     NINE      TEN       '
              
+'ELEN    TWELEVE    THIRTEEN  FOURTEEN  FIFTEEN   '
              
+'SIXTEEN  SEVENTEEN EIGHTEEN  NINETEEN    '
              
+'TWENTY    THIRTY    FORTY     FIFTY     '
              
+'SIXTY     SEVENTY   EIGHTY    NINETY    '
  
SET @s=RIGHT('000000000000000'+CAST(@num AS varchar(15)),15)
  
SET @billion=CAST(SUBSTRING(@s,1,3AS int)--將12位整數分成4段:十億、百萬、千、百十個
  SET @million=CAST(SUBSTRING(@s,4,3AS int)
  
SET @thousand=CAST(SUBSTRING(@s,7,3AS int)
  
SET @result=''
  
SET @i=0
  
WHILE @i<=3
  
BEGIN
    
SET @hundreds=CAST(SUBSTRING(@s,@i*3+1,1AS int)--百位0-9
    SET @tenth=CAST(SUBSTRING(@s,@i*3+2,1AS int)
    
SET @one=(CASE @tenth WHEN 1 THEN 10 ELSE 0 END)+CAST(SUBSTRING(@s,@i*3+3,1AS int)--個位0-19
    SET @tenth=(CASE WHEN @tenth<=1 THEN 0 ELSE @tenth END)--十位0、2-9
    IF (@i=1 and @billion>0 and (@million>0 or @thousand>0 or @hundreds>0)) or
       (
@i=2 and (@billion>0 or @million>0and (@thousand>0 or @hundreds>0)) or
       (
@i=3 and (@billion>0 or @million>0 or @thousand>0and (@hundreds>0))
      
SET @result=@result+''--百位不是0則每段之間加連線符,
    IF (@i=3 and (@billion>0 or @million>0 or @thousand>0and (@hundreds=0 and (@tenth>0 or @one>0)))
      
SET @result=@result+' and '--百位是0則加連線符AND
    IF @hundreds>0
      
SET @result=@result+RTRIM(SUBSTRING(@numbers,@hundreds*10-9,10))+' HUNDRED'
    
IF @tenth>=2 and @tenth<=9
    
BEGIN
      
IF @hundreds>0
        
SET @result=@result+' AND '
      
SET @result=@result+RTRIM(SUBSTRING(@numbers,@tenth*10+171,10))
    
END
    
IF @one>=1 and @one<=19
    
BEGIN
      
IF @tenth>0
        
SET @result=@result+'-'
      
ELSE
        
IF @hundreds>0
          
SET @result=@result+' AND '
      
SET @result=@result+RTRIM(SUBSTRING(@numbers,@one*10-9,10))
    
END
    
IF @i=0 and @billion>0
      
SET @result=@result+' BILLION'
    
IF @i=1 and @million>0
      
SET @result=@result+' MILLION'
    
IF @i=2 and @thousand>0
      
SET @result=@result+' THOUSAND'
    
SET @i=@i+1
  
END
  
IF SUBSTRING(@s,14,2)<>'00'
  
BEGIN
    
SET @result=@result+' POINT '
    
IF SUBSTRING(@s,14,1)='0'
      
SET @result=@result+'ZERO'
    
ELSE
      
SET @result=@result+RTRIM(SUBSTRING(@numbers,CAST(SUBSTRING(@s,14,1AS int)*10-9,10))
    
IF SUBSTRING(@s,15,1)<>'0'
      
SET @result=@result+' '+RTRIM(SUBSTRING(@numbers,CAST(SUBSTRING(@s,15,1AS int)*10-9,10))
  
END
  
RETURN(@result+'  ONLY')
END



/*


declare @kk varchar(50)
set @kk =  dbo.fun_currencyEng(9990)
select @kk as Eng
*/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-611139/,如需轉載,請註明出處,否則將追究法律責任。

相關文章