New datetime datatypes in SQL Server 2008January 2, 2008 From the beginning, Microsoft SQL Server DBAs have longed for two different datatypes, where you could store time and date separately. The long wait is over. In all of the older versions, we had only one data type that could store Datetime datatype, and it stored both the value of the date and the value of the time. Finally, in Microsoft SQL Server 2008, Microsoft is introducing a set of new datatypes for storing date, time and both date and time together. The new data types store more data as well, which means you can store dates anywhere from 01-01-01 to 9999-12-31 and also store time up to the fraction of 9999999. This article illustrates the usage and functionality of different datatypes in Microsoft SQL Server 2008, namely date, time, datetime, datetime2 and datetimeoffset datatypes. Note: This article is written based on the Microsoft SQL Server 2008 Nov CTP TIMEThe datatype TIME is primarily used for storing the time of a day. This includes Hours, minutes, Seconds etc. It is based on a 24-hour clock. The datatype TIME can store seconds up to the fraction of 9999999. Let us declare a variable with the datatype TIME and store some data. declare @mytime TIME set @mytime = GETDATE() select MyTime = @mytime The result is shown below. [Refer Fig 1.0] MyTime 01:48:18.4870000
When you declare a variable with datatype TIME with no precision, SQL Server assumes a 7 digit precision as shown above. The time range is from 00:00:00 through 23:59:59.9999999. We could limit the precision of the datatype as shown below. declare @mytime TIME(3) set @mytime = GETDATE() select MyTime = @mytime The result is shown below. [Refer Fig 1.2] Result MyTime 01:51:25.580
DATEThe datatype DATE is used for storing the date only. This includes Month, Day and year. The value of date can be anywhere from 01-01-01 to 9999-12-31. Lets declare a variable with the datatype DATE and store some data. declare @mydate DATE set @mydate = GETDATE() Select Mydate = @MyDate set @mydate = '01/01/1997' Select Mydate = @MyDate set @mydate = '01/31/9999' Select Mydate = @MyDate set @mydate = '01/01/0001' Select Mydate = @MyDate The range for date is from 0001-01-01 through 9999-12-31 The result is shown below. [Refer Fig 1.2] Result MyDate 2007-12-18 MyDate 1997-01-01 MyDate 9999-01-31 MyDate 0001-01-01
DATETIME2The data type DATETIME2 is the combination of the datatype DATE and TIME. DATETIME2 is used to store both a date value ranging from 01-01-01 to 9999-12-31 as well as a time value up to the fraction of 9999999. Lets declare a variable with the datatype DATETIME2 and store some data as shown below. declare @mydate DATETIME2 set @mydate = GETDATE() Select Mydate = @MyDate set @mydate = convert(datetime2,'01/01/1997 16:14:00.1234567') Select Mydate = @MyDate set @mydate = convert(datetime2,'01/01/0001 16:14:00.1234567') Select Mydate = @MyDate The range for DATETIME2 is from 0001-01-01 00:00:00.0000000 through 9999-12-31 23:59:59.9999999 The result is shown below. [Refer Fig 1.3] Result MyDate 2007-12-18 02:11:45.3130000 MyDate 1997-01-01 16:14:00.1234567 MyDate 0001-01-01 16:14:00.1234567
We could limit the precision as shown below. Declare @mydate DATETIME2(4) set @mydate = GETDATE() Select Mydate = @MyDate set @mydate = convert(datetime2(4),'01/01/1997 16:14:00.1234567') Select Mydate = @MyDate The result is shown below. [Refer Fig 1.2] Result MyDate 2007-12-18 02:14:54.8130 MyDate 1997-01-01 16:14:00.1235 SMALLDATETIME and DATETIMEMicrosoft SQL Server 2008 continues to support existing data types such as datetime and smalldatetime. The range for the datatype smalldatetime is from 1900-01-01 through 2079-06-06. Execute the following query as shown. Declare @Mydate datetime Set @MyDate = getdate() Select MyDate = @MyDate The result is shown below. [Refer Fig 1.4] Result MyDate 2007-12-18 02:31:35.347
The range for the datatype datetime is from 1753-01-01 through 9999-12-31. Execute the following query as shown. Declare @Mydate smalldatetime Set @MyDate = getdate() Select MyDate = @MyDate The result is shown below. [Refer Fig 1.5] Result MyDate 2007-12-18 02:34:00.000
DATETIMEOFFSETMicrosoft SQL Server 2008 introduces a new datetime datatype called datetimeoffset. Datetimeoffset actually defines the date with the combination of the time of a day that is timezone aware. In addition, the clock is a 24-hour cycle. The timezone offset range is from -14:00 through +14:00 Execute the query below to get the timeoffset.
Select
CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 'datetimeoffset'
The result is shown below. [Refer Fig 1.6] Result datetimeoffset 2007-05-08 12:35:29.1234567 +12:15
You can use the convert and cast functions to convert to and from different datetime datatypes. Example: Declare @mydate DATETIME2(4) set @mydate = GETDATE() select @mydate as OriginalDate select CONVERT (smalldatetime,@mydate ) as Smalldate select CONVERT (time,@mydate ) as Justtime Result OriginalDate 2007-12-19 02:15:09.3130 Smalldate 2007-12-19 02:15:00.000 Justtime 02:15:09.3130000 Note: This article is written based on the Microsoft SQL Server 2008 Nov CTP. ConclusionThis article has illustrated the usage and function of the various datatypes related to Date and time, namely date, time, datetime, datetime2 and datetimeoffset. |