Usage for Date and Time Data Types

Familiarize yourself with these usage considerations before using date and time data types.

Date and Time Data Type

Description

DATE

A calendar date, such as a year, month and day. The year can be from 0001 to 9999. The day must be a nonzero value, so that the minimum date is 0001-01-01. A DATE value requires 4 bytes of storage.

DATETIME

A domain, implemented as TIMESTAMP. DATETIME is provided primarily for compatibility with Adaptive Server Enterprise.

SMALLDATETIME

A domain, implemented as TIMESTAMP. SMALLDATETIME is provided primarily for compatibility with Adaptive Server Enterprise.

TIME

Time of day, containing hour, minute, second, and fraction of a second. The fraction is stored to 6 decimal places. A TIME value requires 8 bytes of storage. (ODBC standards restrict TIME data type to an accuracy of seconds. For this reason, do not use TIME data types in WHERE clause comparisons that rely on a higher accuracy than seconds.)

TIMESTAMP

Point in time, containing year, month, day, hour, minute, second, and fraction of a second. The fraction is stored to 6 decimal places. The day must be a nonzero value. A TIMESTAMP value requires 8 bytes of storage.

The valid range of the TIMESTAMP data type is from 0001-01-01 00:00:00.000000 to 9999-12-31 23:59:59.999999. The display of TIMESTAMP data outside the range of 1600-02-28 23:59:59 to 7911-01-01 00:00:00 might be incomplete, but the complete datetime value is stored in the database; you can see the complete value by first converting it to a character string. You can use the CAST() function to do this, as in the following example, which first creates a table with DATETIME and TIMESTAMP columns, then inserts values where the date is greater 7911-01-01.

create table mydates (id int, descript char(20),
  datetime_null datetime, timestamp_null timestamp);
insert into mydates values (1, 'example', '7911-12-30
  23:59:59','7911-12-30 06:03:44');
commit;

When you select without using CAST, hours and minutes are set to 00:00:

select * from mydates;

1, 'example', '7911-12-30 00:00:59.000', '7911-12-30 00:00:44.000'

When you select using cast, you see the complete timestamp:

select id, descript, cast(datetime_null as char(21)),
  cast(timestamp_null as char(21)) from mydates;
1, 'example', '7911-12-30 23:59:59.0', '7911-12-30 06:03:44.0'
Related reference
Compatibility of String to Datetime Conversions