날짜 함수는 오라클 날짜에 대해 연산을 한다.
날짜 함수는 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