ADDDATE 함수와 DATE_ADD 함수는 동일하며, 특정 DATE 값에 대해 덧셈 또는 뺄셈을 실행한다. 리턴 값은 DATE 타입 또는 DATETIME 타입이다. DATETIME 타입을 반환하는 경우는 다음과 같다.
위의 경우 외에 DATETIME 타입의 결과 값을 반환하려면 CAST( ) 함수를 이용하여 첫 번째 인자 값의 타입을 변환해야 한다. 연산 결과의 날짜가 해당 월의 마지막 날짜를 초과하면, 해당 월의 말일을 적용하여 유효한 DATE 값을 반환한다.
인자의 날짜와 시간 값이 모두 0이면 시스템 파라미터 return_null_on_function_errors의 값에 따라 다른 값을 반환한다. return_null_on_function_errors가 yes이면 NULL을 반환하고 no이면 에러를 반환하며, 기본값은 no이다.
계산 결과가 '0000-00-00 00:00:00'과 '0001-01-01 00:00:00' 사이이면, 날짜와 시간 값이 모두 0인 DATE 또는 DATETIME 타입의 값을 반환한다. 그러나 JDBC 프로그램에서는 연결 URL 속성인 zeroDateTimeBehavior의 설정에 따라 동작이 달라진다("API 레퍼런스 > JDBC API > JDBC 프로그래밍 > 연결 설정" 참고).
ADDDATE(date, INTERVAL expr unit)
DATE_ADD(date, INTERVAL expr unit)
ADDDATE(date, days)
unit 값에 대한 expr 값
Unit 값 |
expr 값 |
---|---|
MILLISECOND |
MILLISECONDS |
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
WEEK |
WEEKS |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
YEAR |
YEARS |
SECOND_MILLISECOND |
'SECONDS.MILLISECONDS' |
MINUTE_MILLISECOND |
'MINUTES:SECONDS.MILLISECONDS' |
MINUTE_SECOND |
'MINUTES:SECONDS' |
HOUR_MILLISECOND |
'HOURS:MINUTES:SECONDS.MILLISECONDS' |
HOUR_SECOND |
'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
DAY_MILLISECOND |
'DAYS HOURS:MINUTES:SECONDS.MILLISECONDS' |
DAY_SECOND |
'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE |
'DAYS HOURS:MINUTES' |
DAY_HOUR |
'DAYS HOURS' |
YEAR_MONTH |
'YEARS-MONTHS' |
SELECT SYSDATE, ADDDATE(SYSDATE,INTERVAL 24 HOUR), ADDDATE(SYSDATE, 1);
SYS_DATE date_add( SYS_DATE , INTERVAL 24 HOUR) adddate( SYS_DATE , 1)
==============================================================================
03/30/2010 12:00:00.000 AM 03/31/2010 03/31/2010
--it substracts days when argument < 0
SELECT SYSDATE, ADDDATE(SYSDATE,INTERVAL -24 HOUR), ADDDATE(SYSDATE, -1);
SYS_DATE date_add( SYS_DATE , INTERVAL -24 HOUR) adddate( SYS_DATE , -1)
==============================================================================
03/30/2010 12:00:00.000 AM 03/29/2010 03/29/2010
--when expr is not fully specified for unit
select sys_datetime, adddate(sys_datetime, interval '1:20' HOUR_SECOND);
SYS_DATETIME date_add( SYS_DATETIME , INTERVAL '1:20' HOUR_SECOND)
=======================================================================================
06:18:24.149 PM 06/28/2010 06:19:44.149 PM 06/28/2010
SELECT ADDDATE('0000-00-00', 1 );
ERROR: Conversion error in date format.
SELECT ADDDATE('0001-01-01 00:00:00', -1);
adddate('0001-01-01 00:00:00', -1)
======================
'12:00:00.000 AM 00/00/0000'