본문 바로가기

전산Tip/Oracle

오라클 펑션 - 영문/숫자/한글 제외 기타 문자 제거 (조합형 한글 제거)

반응형



CREATE OR REPLACE FUNCTION GETTEXTTRIM
(
        P_TEXT VARCHAR2
) RETURN VARCHAR2
IS
        /*
         * PGM ID   : GETTEXTTRIM
         * TITLE    :   영문/숫자/한글 제외 기타 문자 제거
         * AUTHOR   : grapro.lim
         * DATE     : 2010.04.14
         * VERSION  : 1.0
         * CONTENTS : 영문/숫자/한글 제외 기타 문자를 제거하며 2BYTE 영숫자를 1BYTE 문자로 치환
         */
        V_RESULT    VARCHAR2(350)   := NULL;
        V_CNT       NUMBER          := 0;
        V_TCNT      NUMBER          := 0;
   
BEGIN

        IF P_TEXT IS NULL THEN
                RETURN NULL;
        END IF;
   
   
        V_TCNT := LENGTH(P_TEXT);
   
   
        LOOP
                EXIT WHEN V_CNT >= V_TCNT ;
                V_CNT := V_CNT + 1;   
               
                IF  ASCIISTR(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN '\AC00' AND '\D7A3'    -- 한글
                    OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 48 AND 57              -- 숫자
                    OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 97 AND 122             -- 영문 소문자
                    OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 65 AND 90              -- 영문 대문자
                    OR 1=0 THEN
                   
                        V_RESULT := V_RESULT || UPPER(SUBSTR(P_TEXT,V_CNT,1));
                   
                END IF;
       
                IF  ASCII(SUBSTR(P_TEXT,V_CNT,1))    BETWEEN 41953 AND 41978        -- 2바이트 영문 소문자
                    OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 41921 AND 41946        -- 2바이트 영문 대문자
                    OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 41904 AND 41913        -- 2바이트 숫자
                    OR 1=0 THEN
                   
                        V_RESULT := V_RESULT || UPPER(CHR(ASCII(SUBSTR(P_TEXT,V_CNT,1))-41856));
                   
                END IF;

        END LOOP;
   

               
        RETURN V_RESULT;

        EXCEPTION
        WHEN OTHERS THEN
                RETURN NULL;
END;