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