날짜/시간 데이터 타입의 산술 연산과 타입 변환

설명

피연산자가 모두 날짜/시간 데이터 타입이면 뺄셈 연산이 가능하며, 리턴 값의 타입은 BIGINT이다. 이때 피연산자의 타입에 따라 연산 단위가 다르므로 주의한다. 날짜/시간 데이터 타입과 정수는 덧셈 및 뺄셈 연산이 가능하며, 이때 연산 단위와 리턴 값의 타입은 날짜/시간 데이터 타입을 따른다.

아래는 피연산자 타입별 허용 연산과 결과 데이터 타입을 정리한 표이다.

피연산자의 타입별 허용 연산과 결과 데이터 타입

 

TIME
(초 단위)

DATE
(일 단위)

TIMESTAMP
(초 단위)

DATETIME
(밀리초 단위)

INT

TIME

뺄셈만 허용
BIGINT

X

X

X

덧셈, 뺄셈 허용
TIME

DATE

X

뺄셈만 허용
BIGINT

뺄셈만 허용
BIGINT

뺄셈만 허용
BIGINT

덧셈, 뺄셈 허용
DATE

TIMESTAMP

X

뺄셈만 허용
BIGINT

뺄셈만 허용
BIGINT

뺄셈만 허용
BIGINT

덧셈, 뺄셈 허용
TIMESTAMP

DATETIME

X

뺄셈만 허용
BIGINT

뺄셈만 허용
BIGINT

뺄셈만 허용
BIGINT

덧셈, 뺄셈 허용
DATETIME

INT

덧셈, 뺄셈 허용
TIME

덧셈, 뺄셈 허용
DATE

덧셈, 뺄셈 허용
TIMESTAMP

덧셈, 뺄셈 허용
DATETIME

모든 산술 연산 허용

참고 사항

날짜/시간 산술 연산의 인자 중 하나라도 NULL이 포함되어 있으면 수식의 결과로 NULL이 반환된다.

예제

-- initial systimestamp value

SELECT SYSDATETIME;

  SYSDATETIME

===============================

  07:09:52.115 PM 01/14/2010

 

-- time type + 10(seconds) returns time type

SELECT (CAST (SYSDATETIME AS TIME) + 10);

 ( cast( SYS_DATETIME  as time)+10)

====================================

  07:10:02 PM

 

-- date type + 10 (days) returns date type

SELECT (CAST (SYSDATETIME AS DATE) + 10);

 ( cast( SYS_DATETIME  as date)+10)

====================================

  01/24/2010

 

-- timestamp type + 10(seconds) returns timestamp type

SELECT (CAST (SYSDATETIME AS TIMESTAMP) + 10);

 ( cast( SYS_DATETIME  as timestamp)+10)

=========================================

  07:10:02 PM 01/14/2010

 

-- systimestamp type + 10(milliseconds) returns systimestamp type

SELECT (SYSDATETIME  + 10);

 ( SYS_DATETIME +10)

===============================

  07:09:52.125 PM 01/14/2010

 

SELECT DATETIME '09/01/2009 03:30:30.001 pm'- TIMESTAMP '08/31/2009 03:30:30 pm';

 datetime '09/01/2009 03:30:30.001 pm'-timestamp '08/31/2009 03:30:30 pm'

=======================================

  86400001

 

SELECT TIMESTAMP '09/01/2009 03:30:30 pm'- TIMESTAMP '08/31/2009 03:30:30 pm';

 timestamp '09/01/2009 03:30:30 pm'-timestamp '08/31/2009 03:30:30 pm'

=======================================

  86400