행위

타임존 함수

DB CAFE

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 XXX."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;
/