행위

타임존 함수

DB CAFE

DBCAFE (토론 | 기여)님의 2020년 3월 13일 (금) 15:34 판 (타임존 시간(+9,서울인경우)으로 도시코드 조회)
thumb_up 추천메뉴 바로가기


1 타임존 시간(+9,서울인경우)으로 도시코드 조회[편집]

CREATE OR REPLACE FUNCTION FN_GET_CTY_TM ( inDate         DATE                         /* 변환 날짜 */
                                            , inTZNum   NUMBER DEFAULT 0                /* 타임존별 시간 +,- */  
                                       )
RETURN DATE IS
/*
FN_GET_CTY_TM(SYSDATE,'+9') -- 서울 기준  
FN_GET_CTY_TM(SYSDATE,'+7') -- 인도네시아/자카르타   
*/
BEGIN   
    RETURN inDate + ((inTZNum-9)/24); 

EXCEPTION
  WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(' FN_GET_CTY_TM() ERROR:' || SQLERRM );
    RETURN NULL;
END FN_GET_CTY_TM;
/

2 타임존명으로 도시코드 조회[편집]

CREATE OR REPLACE FUNCTION RTIS."FN_GET_CTY_TZ_TM" ( inDate DATE /* 변환 할 날짜 */

                                      , inToTimezone   VARCHAR2                        /* 타임존 이름 Timezone ID   ex) 'Asia/Seoul' */
                                      , inFromTimezone VARCHAR2 DEFAULT 'Asia/Seoul'   /* inFromTimezone에서 inToTimezone으로 변환 GMT  ex) 'Asia/Seoul' */
                                      )

RETURN DATE IS /*

* Example:
  - FN_GET_CTY_TZ_TM(SYSDATE, 'America/New_York' )               : SYSDATE
  - FN_GET_CTY_TZ_TM(SYSDATE, 'America/New_York', 'Asia/Seoul' ) : SYSDATE
  • /
   vInFromTimezone     VARCHAR(20)   := NULL;

BEGIN

   vInFromTimezone := inFromTimezone;
 
 IF inDate IS NULL THEN
     RETURN NULL;
   ELSIF inToTimezone IS NULL THEN
       RETURN NULL;
   ELSIF vInFromTimezone IS NULL THEN
       vInFromTimezone := 'Asia/Seoul';
   END IF;
   
   RETURN FROM_TZ( CAST( inDate AS TIMESTAMP ) , vInFromTimezone ) AT TIME ZONE inToTimezone ;

EXCEPTION

 WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(' RTIS.FN_GET_CTY_TZ_TM() ERROR:' || SQLERRM );
   RETURN NULL;

END FN_GET_CTY_TZ_TM; /