Datetime Functions (날짜 함수)

날짜 함수는 오라클 날짜에 대해 연산을 한다.

날짜 함수는 NUMBER형 값 또는 DATE형의 값을 RETURN 한다.

 

SYSDATE

SYSDATE 함수를 사용하면 현재 일자와 시간(시스템기준)을 얻을 수 있다.

최소단위 = 1초

-- SYSDTE 예제
SELECT TO_CHAR(SYSDATE,'RRRR-MM-DD HH24:MI:SS') "지금시간"
FROM DUAL ;

SELECT TO_CHAR(SYSDATE-1,'RRRR-MM-DD HH24:MI:SS') "하루전지금시간"
FROM DUAL ;

SELECT TO_CHAR(SYSDATE-1/24,'RRRR-MM-DD HH24:MI:SS') "1시간전시간"
FROM DUAL ;

SELECT TO_CHAR(SYSDATE-1/24/60,'RRRR-MM-DD HH24:MI:SS') "1분전시간"
FROM DUAL ;

SELECT TO_CHAR(SYSDATE-1/24/60/10,'RRRR-MM-DD HH24:MI:SS') "6초전시간"
FROM DUAL ;

SELECT TO_CHAR(SYSDATE-(5/24 + 30/24/60 + 10/24/60/60),'RRRR-MM-DD HH24:MI:SS') "5시간 30분 10초전"
FROM DUAL ;

 

SYSTIMESTAMP

SYSTIMESTAMP 함수를 사용하면 현재 일자와 시간(시스템기준)을 얻을 수 있다.

최소단위 = 10억분의 1초 (10의 9승)

-- SYSTIMESTAMP 예제
SELECT TO_CHAR(SYSTIMESTAMP,'RRRR-MM-DD HH24:MI:SS.FF3') 
FROM DUAL ;

SELECT TO_CHAR(SYSTIMESTAMP,'RRRR-MM-DD HH24:MI:SS.FF9') 
FROM DUAL ;

SELECT TO_CHAR(SYSTIMESTAMP -1/24,'RRRR-MM-DD HH24:MI:SS') "1시간전시간"
FROM DUAL ;

SELECT TO_CHAR(SYSTIMESTAMP -1/24/60,'RRRR-MM-DD HH24:MI:SS') "1분전시간"
FROM DUAL ;

 

ADD_MONTHS(a, b)

ADD_MONTHS 함수는 a의 날짜에 b의 달을 더한 값을 반환 한다.

-- SYSDATE를 이용한 예제
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,3),'RRRR-MM-DD') "date"
FROM DUAL; 


-- TIMESTAMP를 이용한 예제
SELECT TO_CHAR(ADD_MONTHS(SYSTIMESTAMP,3),'RRRR-MM-DD') "date"
FROM DUAL;

 

MONTHS_BETWEEN(a1, a2)

MONTHS_BETWEEN은 a1과 a2 사이의 달의 수를 NUMBER형 타입으로 반환 한다.

-- 두 일자 사이에 달의 수를 조회하는 예제
SELECT MONTHS_BETWEEN(TO_DATE('2010-06-05','RRRR-MM-DD'), 
TO_DATE('2010-05-01','RRRR-MM-DD')) "month" 
FROM DUAL;

-- 두 일자 사이에 일짜 수를 조회하는 예제
SELECT TO_DATE('2010-06-05','RRRR-MM-DD') - 
TO_DATE('2010-05-01','RRRR-MM-DD') "Day" 
FROM DUAL;

 

LAST_DAY(d)

LAST_DAY 함수는 달의 마지막 날의 날짜를 반환 한다

-- LAST_DAY예제
SELECT SYSDATE today, LAST_DAY(SYSDATE) lastday 
FROM DUAL;

TODAY LASTDAY
-------- --------
11/05/28 11/05/31

 

NEXT_DAY(d, c1)

NEXT_DAY는 돌아오는 명시된 요일의 일자를 반환한다.

요일은 1(일) ~ 7(토)로 입력하면 된다.

-- NEXT_DAY예제
SELECT NEXT_DAY(SYSDATE, 4) "Next Wednesday"
FROM DUAL;

Next Wed
--------
11/06/01

-- NEXT_DAY예제
SELECT NEXT_DAY(TO_DATE('20110501','RRRRMMDD'), 2) "5월 첫째주 월요일"
FROM DUAL;

5월 첫째
--------
11/05/02

 

ROUND(d[,F])

ROUND 함수는 F에 지정된 단위로 반올림 한다. F가 연도라면 연도 단위로 반올림 한다. F가 생략되면 날짜를 가장 가까운 날짜로 반올림한다.

-- ROUND예제
SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS'), 'YEAR'),
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;

SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS'), 'MONTH'),
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;

SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS'), 'DD'),
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;

SELECT TO_CHAR(ROUND(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS')), 
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;


-- 실행 결과
2012-01-01 00:00:00
2011-09-01 00:00:00
2011-09-12 00:00:00
2011-09-12 00:00:00

 

TRUNC(d[,F])

TRUNC 함수는 F에 지정된 단위로 절삭 한다

-- TRUNC예제
SELECT TO_CHAR(TRUNC(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS'), 'YEAR'),
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;

SELECT TO_CHAR(TRUNC(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS'), MONTH'),
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;

SELECT TO_CHAR(TRUNC(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS'), 'DD'),
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;

SELECT TO_CHAR(TRUNC(TO_DATE('2011-09-11 21:00:01',
'RRRR-MM-DD HH24:MI:SS')), 
'RRRR-MM-DD HH24:MI:SS') 
FROM DUAL;


-- 실행 결과
2011-01-01 00:00:00 
2011-09-01 00:00:00
2011-09-11 00:00:00
2011-09-11 00:00:00

 

날짜에 대한 산술 연산

연 산 결과치 사용목적
날짜 + 숫자 날짜 특정한 날로부터 며칠 후의 날짜 계산
날짜 – 숫자 날짜 특정한 날로부터 며칠 전의 날짜 계산
날짜 – 날짜 숫자 두 날짜 사이의 차이를 숫자로 계산

Oracle Datetime Functions

ADD_MONTHS
CURRENT_DATE
CURRENT_TIMESTAMP
DBTIMEZONE
EXTRACT (datetime)
FROM_TZ
LAST_DAY
LOCALTIMESTAMP
MONTHS_BETWEEN
NEW_TIME
NEXT_DAY
NUMTODSINTERVAL
NUMTOYMINTERVAL
ROUND (date)
SESSIONTIMEZONE
SYS_EXTRACT_UTC
SYSDATE
SYSTIMESTAMP
TO_CHAR (datetime)
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_DSINTERVAL
TO_YMINTERVAL
TRUNC (date)
TZ_OFFSET

– 강좌 URL : http://www.gurubee.net/lecture/1026