피연산자가 모두 날짜/시간 데이터 타입이면 뺄셈 연산이 가능하며, 리턴 값의 타입은 INT이다. 이때 피연산자의 타입에 따라 연산 단위가 다르므로 주의한다. 날짜/시간 데이터 타입과 정수는 덧셈 및 뺄셈 연산이 가능하며, 이때 연산 단위와 리턴 값의 타입은 날짜/시간 데이터 타입을 따른다.
아래는 피연산자 타입별 허용 연산과 결과 데이터 타입을 정리한 표이다.
피연산자의 타입별 허용 연산과 결과 데이터 타입
|
TIME |
DATE |
TIMESTAMP |
DATETIME |
INT |
---|---|---|---|---|---|
TIME |
뺄셈만 허용 |
X |
X |
X |
덧셈, 뺄셈 허용 |
DATE |
X |
뺄셈만 허용 |
뺄셈만 허용 |
뺄셈만 허용 |
덧셈, 뺄셈 허용 |
TIMESTAMP |
X |
뺄셈만 허용 |
뺄셈만 허용 |
뺄셈만 허용 |
덧셈, 뺄셈 허용 |
DATETIME |
X |
뺄셈만 허용 |
뺄셈만 허용 |
뺄셈만 허용 |
덧셈, 뺄셈 허용 |
INT |
덧셈, 뺄셈 허용 |
덧셈, 뺄셈 허용 |
덧셈, 뺄셈 허용 |
덧셈, 뺄셈 허용 |
모든 산술 연산 허용 |
날짜/시간 산술 연산의 인자 중 하나라도 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