2014年5月4日 星期日

將阿拉伯數字轉換為國字數字小寫的Function

將阿拉伯數字轉換為國字數字小寫的Function



  

CREATE FUNCTION USF_NumToCNum
( 
  @intValue                                 INT
)
RETURNS VARCHAR(40)
AS
BEGIN
  /*------------------------------------------------------*/
  /* 程式代號: USF_NumToCNum.SQL*/
  /* 程式說明: 將阿拉伯數字轉換為中文數字的Function */
  /**/
  /* 說明: 如7800, 轉成七千八百*/
  /**/
  /*------------------------------------------------------*/
  
    DECLARE @strNum char(40) 
    DECLARE @strNum1 char(20) 
    DECLARE @strUnin char(20) 
    DECLARE @strNumNo char(20) 
    DECLARE @strValue char(20) 
    DECLARE @strString char(40) 
    DECLARE @intStep int 
    DECLARE @intLen int 
    DECLARE @intCount int
    IF @intValue>10 AND @intValue<20 
    BEGIN 
        SELECT @strNum='十' 
        SELECT @strNum1= CONVERT(CHAR,(@intValue%10)) 
        SELECT @strNum1= CASE 
                          WHEN @strNum1='1' THEN '一' 
                          WHEN @strNum1='2' THEN '二' 
                          WHEN @strNum1='3' THEN '三' 
                          WHEN @strNum1='4' THEN '四' 
                          WHEN @strNum1='5' THEN '五' 
                          WHEN @strNum1='6' THEN '六' 
                          WHEN @strNum1='7' THEN '七' 
                          WHEN @strNum1='8' THEN '八' 
                          WHEN @strNum1='9' THEN '九' 
                          WHEN @strNum1='0' THEN '零'
                         END 
        SET @strNum=RTRIM(@strNum)+RTRIM(@strNum1) 
    END
    IF @intValue=10 
    BEGIN 
        SELECT @strNum='十' 
    END
    IF @intValue<10 data-blogger-escaped-intvalue="" data-blogger-escaped-or="">=20 
    BEGIN
        SET @strNum=RTRIM(CONVERT(CHAR(20),@intValue)) 
        SET @intLen=LEN(@strNum) 
        SET @strString='' 
        SET @strNumNo='' 
        SET @intStep=1 
        SET @intCount=0
        WHILE @intStep<= @intLen 
            BEGIN
            SET @strValue=SUBSTRING(@strNum,@intLen+1-@intStep,1)     
                SET @strUnin='' 
                SET @strNumNo='' 
                    BEGIN 
                        SELECT @strNumNo=RTRIM(@strValue) 
                        SELECT @strNumNo= CASE WHEN @strNumNo='1' THEN '一' 
                                               WHEN @strNumNo='2' THEN '二' 
                                               WHEN @strNumNo='3' THEN '三' 
                                               WHEN @strNumNo='4' THEN '四' 
                                               WHEN @strNumNo='5' THEN '五' 
                                               WHEN @strNumNo='6' THEN '六' 
                                               WHEN @strNumNo='7' THEN '七' 
                                               WHEN @strNumNo='8' THEN '八' 
                                               WHEN @strNumNo='9' THEN '九' 
                                               WHEN @strNumNo='0' THEN '零'
                                           END
                        SET @intCount = @intCount + 1 
                        SET @intStep = @intStep + 1 
                        IF @intCount=2 OR @intCount=6 
                                 SET @strUnin = '十' 
                                IF @intCount=3 OR @intCount=7 
                                 SET @strUnin = '百' 
                                IF @intCount=4 OR @intCount=8 
                                SET @strUnin = '千' 
                                IF @intCount=5 
                                SET @strUnin = '萬' 
                                IF @intCount=9 
                            SET @strUnin = '億' 
                        IF @strNumNo='' 
                            SET @strUnin = '' 
                    END 
                SET @strString=RTRIM(@strNumNo)+RTRIM(@strUnin)+RTRIM(@strString) 
            END 
        SET @strNum=@strString
        --若最後一位數為 0,則將該數字去掉 
        IF RIGHT(@intValue,1)='0' 
            SET @strNum=LEFT(@strNum,LEN(rtrim(@strNum))-1) 
        --若輸入數為0,則回傳「零」
        IF @intValue = 0
            SET @strNum='零' 
        --若輸入數除於 100 餘數為0,則取代「零十」為空
        IF @intValue % 100 = 0 
            SET @strNum=REPLACE(@strNum,'零十','') 
        --若輸入數除於 100 餘數為 1~9 ,則取代「零十」為「零」
        IF @intValue % 100 BETWEEN 1 and 9
            SET @strNum=REPLACE(@strNum,'零十','零')
    END
    RETURN rtrim(@strNum) 
END


卒仔〞筆記 : 參考資料的最後判斷 為 固定 100 與 101~110 , 
                   但若是200以上的話, 則不符合本身的功能需求, 即最後判斷有更動sf。
                   筆記 筆記!!!!


沒有留言:

張貼留言