본문 바로가기

ORACLE

ORACLE TIME FUNCTION v1.0

ORACLE TIME FUNCTION

 

from Beginning Oracle Programming | 정보문화사

 

1. TIME FUNCTION

A.   DUAL

SQL> select sysdate from dual;

 

SYSDATE

---------

31-MAY-09

 

SQL> select systimestamp from dual;

 

SYSTIMESTAMP

---------------------------------------------------------------------------

31-MAY-09 10.13.09.298933 AM +09:00

 

B.   ADD_MONTHS

시간정보에 월(MONTH) 를 더하는 함수이다.

SQL> select add_months(systimestamp,2) from dual;

 

ADD_MONTH

---------

31-JUL-09

 

C.   TIMEZONE, CURRENT_DATE

CURRENT_DATE TIMEZONE 값에 의존적이다 .TIMEZONE 값을 수정하면 CURRENT_DATE 값이 변하는 것을 확인할 수 있다.

 

SQL> select sessiontimezone,current_date from dual;

 

SESSIONTIMEZONE

---------------------------------------------------------------------------

CURRENT_D

---------

+09:00

31-MAY-09

 

TIMEZONE 을 수정하였다.

 

SQL> alter session set time_zone = '-02:00

  2  ';

 

Session altered.

 

SQL> select sessiontimezone,current_date from dual;

 

SESSIONTIMEZONE

---------------------------------------------------------------------------

CURRENT_D

---------

-02:00

30-MAY-09

 

D.   CURRENT_TIMESTAMP

위에서 TIMEZONE 수정 후 CURRENT_TIMESTAMP 를 조회해 보면 변경되어있는 TIMEZONE  값을 확인할 수 있다. CURRENT_TIMESTAMP(입력1) 형태로 사용하며 입력1 를 정의하면 소수단위의 초까지 출력한다.

 

SQL> select systimestamp from dual;

 

SYSTIMESTAMP

---------------------------------------------------------------------------

31-MAY-09 10.16.33.860680 AM +09:00

 

SQL> select systimestamp,current_timestamp(4) from dual;

 

SYSTIMESTAMP

---------------------------------------------------------------------------

CURRENT_TIMESTAMP(4)

---------------------------------------------------------------------------

31-MAY-09 10.19.33.523956 AM +09:00

30-MAY-09 11.19.33.5240 PM -02:00

 

 

"afiedt.buf" 2L, 53C written

 

  1* select systimestamp,current_timestamp(6) from dual

SQL> /

 

SYSTIMESTAMP

---------------------------------------------------------------------------

CURRENT_TIMESTAMP(6)

---------------------------------------------------------------------------

31-MAY-09 10.19.56.052516 AM +09:00

30-MAY-09 11.19.56.052524 PM -02:00

 

E.   DBTIMEZONE

DB 설치시 정의했던 혹은 ALTER SYSTEM 으로 정의한 TIME ZONE을 출력한다. 이는 SYSTIMESTAMP 에서 확인할 수 있는 TIME ZONE 값과 일치한다.

 

SQL> select dbtimezone from dual;

 

DBTIME

------

+09:00

 

F.   EXTRACT

DATE 값에서 특정 값 이를 테면 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 를 추출하는 함수이다.

 

SQL> select extract(year from systimestamp) from dual;

 

EXTRACT(YEARFROMSYSTIMESTAMP)

-----------------------------

                         2009

 

SQL> select extract(month from systimestamp) from dual;

 

EXTRACT(MONTHFROMSYSTIMESTAMP)

------------------------------

                             5

 

 

SQL> select extract(day from systimestamp) from dual;

 

EXTRACT(DAYFROMSYSTIMESTAMP)

----------------------------

                          31

 

SQL> select extract(hour from systimestamp) from dual;

 

EXTRACT(HOURFROMSYSTIMESTAMP)

-----------------------------

                            1

 

SQL> select extract(minute from systimestamp) from dual;

 

EXTRACT(MINUTEFROMSYSTIMESTAMP)

-------------------------------

                             24

 

SQL> select extract(second from systimestamp) from dual;

 

EXTRACT(SECONDFROMSYSTIMESTAMP)

-------------------------------

                      36.796024

 

G.   LAST_DAY

해당 달의 마지막 날을 출력하는 함수이다. 달을 생략하는 경우 현재의 DATE 값에 근거해 마지막 날을 출력한다.

 

SQL> select last_day(to_date('2009-03','YYYY-MM')) from dual;

 

LAST_DAY(

---------

31-MAR-09

 

 

SQL> select last_day(to_date('2009','YYYY')) from dual;

 

LAST_DAY(

---------

31-MAY-09

 

H.   LOCALTIMESTAMP

ALTER SESSION 으로 변경한 TIME ZONE 의 영향을 받는다.

 

SQL> select localtimestamp from dual;

 

LOCALTIMESTAMP

---------------------------------------------------------------------------

30-MAY-09 11.28.29.904158 PM

 

 

 

SQL> alter session set time_zone='+09:00';

 

Session altered.

 

SQL> select localtimestamp from dual;

 

LOCALTIMESTAMP

---------------------------------------------------------------------------

31-MAY-09 10.29.39.795929 AM

 

 

I.   MONTHS_BETWEEN

두개의 DATE 값을 입력으로 받으며 그 간격을 출력한다.(달 단위로) MONTHS_BETWEEN(입력1, 입력2) 와 같이 사용하며 입력1 > 입력2 의 경우 음수로

출력된다.

 

SQL> select months_between(sysdate,to_date('2009-04','YYYY-MM')) from dual;

 

MONTHS_BETWEEN(SYSDATE,TO_DATE('2009-04','YYYY-MM'))

----------------------------------------------------

                                          1.98190636

 

J.   NEXT_DAY

NEXT_DAY(입력1, 입력2) 의 형태를 가지며 입력2 에는 요일값이 들어간다. 입력1로부터 이후 입력2의 요일에 해당하는 날짜를 출력하는 함수이다.

 

SQL> select next_day(to_date('2009-05-31','YYYY-MM-DD'),'SUNDAY') from dual;

 

NEXT_DAY(

---------

07-JUN-09

 

SQL> select next_day(to_date('2009-05-31','YYYY-MM-DD'),'SUN') from dual;

 

NEXT_DAY(

---------

07-JUN-09

 

K.   NUMTODSINTERVAL, NUMTOYMINTERVAL

NUMTODSINTERVAL – DAY, SECOND

NUMTOYMINTERVAL – YEAR, MONTH

 

SQL> select systimestamp+numtodsinterval(1,'day') from dual;

 

SYSTIMESTAMP+NUMTODSINTERVAL(1,'DAY')

---------------------------------------------------------------------------

01-JUN-09 10.40.41.715456000 AM +09:00

 

SQL> select systimestamp+numtoyminterval(1,'year') from dual;

 

SYSTIMESTAMP+NUMTOYMINTERVAL(1,'YEAR')

---------------------------------------------------------------------------

31-MAY-10 10.41.43.070483000 AM +09:00

 

L.   ROUND

SQL> select sysdate from dual;

 

SYSDATE

---------

31-MAY-09

 

SQL> select round(sysdate) from dual;

 

ROUND(SYS

---------

31-MAY-09

 

 

SQL> select round(sysdate,'day') from dual;

 

ROUND(SYS

---------

31-MAY-09

 

 

SQL> select round(sysdate,'month') from dual;

 

ROUND(SYS

---------

01-JUN-09

 

SQL> select round(sysdate,'day') from dual;

 

ROUND(SYS

---------

31-MAY-09

 

M.   TRUNC

SQL> select trunc(sysdate,'day') from dual;

 

TRUNC(SYS

---------

31-MAY-09

 

SQL> select trunc(sysdate,'month') from dual;

 

TRUNC(SYS

---------

01-MAY-09

 

SQL> select trunc(sysdate,'year') from dual;

 

TRUNC(SYS

---------

01-JAN-09