Thursday, December 23, 2010

SQL Server 2008 New DATETIME DataTypes

The DATETIME function’s major change in SQL Server 2008 is the four DATETIME data types introduced. They are

  • DATE
  • TIME
  • DATETIME2
  • DATETIMEOFFSE

DATE Data Type

Property Value
Syntax date
Usage DECLARE @MyDate date
CREATE TABLE Table1 ( Column1 date )
Default string literal format YYYY-MM-DD
Range 0001-01-01 through 9999-12-31
January 1, 1 A.D. through December 31, 9999 A.D.
Element ranges YYYY is four digits from 0001 to 9999 that represent a year.
MM is two digits from 01 to 12 that represent a month in the specified year.
DD is two digits from 01 to 31, depending on the month, that represent a day of the specified month.
Character length 10 positions
Precision, scale 10, 0
Storage size 3 bytes, fixed
Storage structure 1, 3-byte integer stores date.
Accuracy One day
Default value 1900-01-01
This value is used for the appended date part for implicit conversion from time to datetime2 or datetimeoffset.
Calendar Gregorian
User-defined fractional second precision No
Time zone offset aware and preservation No
Daylight saving aware No

TIME Datatype

Property Value
Syntax time [ (fractional second precision) ]
Usage DECLARE @MyTime time(7)
CREATE TABLE Table1 ( Column1 time(7) )
fractional seconds precision Specifies the number of digits for the fractional part of the seconds.
This can be an integer from 0 to 7.
The default fractional precision is 7 (100ns).
Usage DECLARE @MyTime time(7)
CREATE TABLE Table1 ( Column1 time(7) )
Default string literal format hh:mm:ss[.nnnnnnn]
Range 00:00:00.0000000 through 23:59:59.9999999
Element ranges hh is two digits, ranging from 0 to 23, that represent the hour.
mm is two digits, ranging from 0 to 59, that represent the minute.
ss is two digits, ranging from 0 to 59, that represent the second.
n* is zero to seven digits, ranging from 0 to 9999999, that represent the fractional seconds.
Character length 8 positions minimum (hh:mm:ss) to 16 maximum (hh:mm:ss.nnnnnnn)
Precision, scale
(user specifies scale only)
Specified scaleResult (precision, scale)Column length (bytes)Fractional seconds precision
time(16,7)57
time(0)(8,0)30-2
time(1)(10,1)30-2
time(2)(11,2)30-2
time(3)(12,3)43-4
time(4)(13,4)43-4
time(5)(14,5)55-7
time(6)(15,6)55-7
time(7)(16,7)55-7
Storage size 5 bytes, fixed, is the default with the default of 100ns fractional second precision.
Accuracy 100 nanoseconds
Default value 00:00:00
This value is used for the appended time part for implicit conversion from date to datetime2 or datetimeoffset.
User-defined fractional second precision Yes
Time zone offset aware and preservation No
Daylight saving aware No

DATETIME2 Data Type

Property Value
Syntax datetimeoffset [ (fractional seconds precision) ]
Usage DECLARE @MyDatetimeoffset datetimeoffset(7)
CREATE TABLE Table1 ( Column1 datetimeoffset(7) )
Default string literal formats (used for down-level client) YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]
For more information, see the "Backward Compatibility for Down-level Clients" section of Using Date and Time Data.
Date range 0001-01-01 through 9999-12-31
January 1,1 A.D. through December 31, 9999 A.D.
Time range 00:00:00 through 23:59:59.9999999
Time zone offset range
  • -14:00 through +14:00
Element ranges YYYY is four digits, ranging from 0001 through 9999, that represent a year.
MM is two digits, ranging from 01 to 12, that represent a month in the specified year.
DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.
hh is two digits, ranging from 00 to 23, that represent the hour.
mm is two digits, ranging from 00 to 59, that represent the minute.
ss is two digits, ranging from 00 to 59, that represent the second.
n* is zero to seven digits, ranging from 0 to 9999999, that represent the fractional seconds.
hh is two digits that range from -14 to +14.
mm is two digits that range from 00 to 59.
Character length 26 positions minimum (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) to 34 maximum (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)
Precision, scale
Specified scaleResult (precision, scale)Column length (bytes)Fractional seconds precision
datetimeoffset(34,7)107
datetimeoffset(0)(26,0)80-2
datetimeoffset(1)(28,1)80-2
datetimeoffset(2)(29,2)80-2
datetimeoffset(3)(30,3)93-4
datetimeoffset(4)(31,4)93-4
datetimeoffset(5)(32,5)105-7
datetimeoffset(6)(33,6)105-7
datetimeoffset(7)(34,7)105-7
Storage size 10 bytes, fixed is the default with the default of 100ns fractional second precision.
Accuracy 100 nanoseconds
Default value 1900-01-01 00:00:00 00:00
Calendar Gregorian
User-defined fractional second precision Yes
Time zone offset aware and preservation Yes
Daylight saving aware No

DATETIMEOFFSET Datatype

Property Value
Syntax datetimeoffset [ (fractional seconds precision) ]
Usage DECLARE @MyDatetimeoffset datetimeoffset(7)
CREATE TABLE Table1 ( Column1 datetimeoffset(7) )
Default string literal formats YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]
Date range 0001-01-01 through 9999-12-31
January 1,1 A.D. through December 31, 9999 A.D.
Time range 00:00:00 through 23:59:59.9999999
Time zone offset range
  • -14:00 through +14:00
Element ranges YYYY is four digits, ranging from 0001 through 9999, that represent a year.
MM is two digits, ranging from 01 to 12, that represent a month in the specified year.
DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.
hh is two digits, ranging from 00 to 23, that represent the hour.
mm is two digits, ranging from 00 to 59, that represent the minute.
ss is two digits, ranging from 00 to 59, that represent the second.
n* is zero to seven digits, ranging from 0 to 9999999, that represent the fractional seconds.
hh is two digits that range from -14 to +14.
mm is two digits that range from 00 to 59.
Character length 26 positions minimum (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) to 34 maximum (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)
Precision, scale
Specified scaleResult (precision, scale)Column length (bytes)Fractional seconds precision
datetimeoffset(34,7)107
datetimeoffset(0)(26,0)80-2
datetimeoffset(1)(28,1)80-2
datetimeoffset(2)(29,2)80-2
datetimeoffset(3)(30,3)93-4
datetimeoffset(4)(31,4)93-4
datetimeoffset(5)(32,5)105-7
datetimeoffset(6)(33,6)105-7
datetimeoffset(7)(34,7)105-7
Storage size 10 bytes, fixed is the default with the default of 100ns fractional second precision.
Accuracy 100 nanoseconds
Default value 1900-01-01 00:00:00 00:00
Calendar Gregorian
User-defined fractional second precision Yes
Time zone offset aware and preservation Yes
Daylight saving aware No

Difference between SMALLDATETIME and DATETIME

The differences are catagorize in three things.

1. Range of Dates


A DateTime can range from January 1, 1753 to December 31, 9999.
A SmallDateTime can range from January 1, 1900 to June 6, 2079.

2. Accuracy

DateTime is accurate to three-hundredths of a second.
SmallDateTime is accurate to one minute.

3. Size

DateTime takes up 8 bytes of storage space.
SmallDateTime takes up 4 bytes of storage space.