DATETIME2数据类型 DATETIME2数据类型和DATETIME数据类型很相似。它们之间的不同之处就是DATETIME2支持范围更广的数据(和DATE一样)并且精确性也更高(和TIME一样)。如同TIME数据类型一样,你可以指定它的精确度。 换句话说,DATETIME2主要是连接DATE值以及TIME值。
例如,用下面SELECT语句就可以从DateTime2_Type列中返回数据,这些数据被设置成为DATETIME2列。 SELECT OrderID, DateTime2_Type FROM Sales.OrderDates 语句返回数据的结果如……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
DATETIME2数据类型
DATETIME2数据类型和DATETIME数据类型很相似。它们之间的不同之处就是DATETIME2支持范围更广的数据(和DATE一样)并且精确性也更高(和TIME一样)。如同TIME数据类型一样,你可以指定它的精确度。
换句话说,DATETIME2主要是连接DATE值以及TIME值。例如,用下面SELECT语句就可以从DateTime2_Type列中返回数据,这些数据被设置成为DATETIME2列。
SELECT OrderID, DateTime2_Type FROM Sales.OrderDates |
语句返回数据的结果如下::
OrderID DateTime2_Type 1001 2008-09-22 18:27:10.1234567 |
正如你看到的一样,DATETIME2首先提供的是日期值,然后是时间,精确度为7位。除了小数秒7位之外,这个值看起来就好像是DATETIME值或者是一个后面附着有TIME值的DATE值。
你还可以将其他的datetime转换为DATETIME2值,如下列语句所示:
SELECT OrderID, CAST(DateTimeOffset_Type AS DATETIME2(7)) AS ConvertedType FROM Sales.OrderDates |
注意我在将DATETIMEOFFSET值转换到DATETIME2的过程中,制定的精确度是7位。这一语句返回的结果和先前的语句返回的结果一样。
但是如果你转换其他类型的数值,你得到的结果就不一样了。例如:下面的语句从Date_Type列中找回的数据就属于DATE数据类型,将这些数据转换成DATETIME2(7):
SELECT OrderID, CAST(Date_Type AS DATETIME2(7)) AS ConvertedType FROM Sales.OrderDates |
在SQL Server转换这些值时,它给新值增加一个默认时间,其结果显示如下:
OrderID ConvertedType 1001 2008-09-22 00:00:00.0000000 |
注意这些时间都是零(精确度为7位),也就是24小时的第一个值。无论你何时需要假定时间(如在这种情况下),所有这些零都用到了,也就是说默认时间值为00:00:00.0000000。
然而日期的默认值很不一样。在下面的语句中,我将Time_Type列中属于TIME数据类型的数值转换到了DATETIME2(7)中:
SELECT OrderID, CAST(Time_Type AS DATETIME2(7)) AS ConvertedType FROM Sales.OrderDates |
因为TIME值没有包括这些日期,SQL Server假定了一个日期,结果如下:
OrderID ConvertedType 1001 1900-01-01 18:27:10.1234567 |
所以,在没有日期默认值时日期显示的是1900年1月1日。
DATETIMEOFFSET数据类型
DATETIMEOFFSET数据类型和DATETIME2的数据类型一样,除此之外,DATETIMEOFFSET值还增加了很重要的一项:时区偏移(time-zone offset)值。该偏移值代表一系列在Coordinated Universal时间(UTC)前后小时和分钟的数字。正数就代表在UTC基础之上增加的时间数,这样得到的就是本地时间。负数是从UTC时间的基础上减去这个数字就是当地时间。
我们看看下面的一个例子,这样更易于理解。下面的SELECT语句用于从DateTimeOffset_Type列中找回数据,这些数据就属于DATETIMEOFFSET数据类型:
SELECT OrderID, DateTimeOffset_Type FROM Sales.OrderDates |
在下面的结果中,你能看到DATETIMEOFFSET值包括时区偏移数值07:00。
OrderID DateTimeOffset_Type 1001 2008-09-22 18:27:10.1234567 -07:00 |
返回值表示你必须从datetime值中减去七小时,这样才能得到当地时间。
在你将另外一种datetime值转换为DATETIMEOFFSET值时,时区偏移值就默认为+00:00。例如:以下SELECT语句就将DATETIME2转换为DATETIMEOFFSET:
SELECT OrderID, CAST(DateTime2_Type AS DATETIMEOFFSET(7)) AS ConvertedType FROM Sales.OrderDates |
结果如下:
OrderID ConvertedType 1001 2008-09-22 18:27:10.1234567 +00:00 |
现在的时区偏移值为+00:00,在这种情下,UTC时间和当地时间相同。
如果你想将DATE值转换成为DATETIMEOFFSET,那么该数值的时间部分就都是零。例如,以下语句就用于Date_Type值转换成为DATETIMEOFFSET(7):
SELECT OrderID, CAST(Date_Type AS DATETIMEOFFSET(7)) AS ConvertedType FROM Sales.OrderDates |
返回结果如下:
OrderID ConvertedType 1001 2008-09-22 00:00:00.0000000 +00:00 |
注意时间和时区偏移值都设为零。
但是,如果你将TIME值、返回值的时间部分都设为1900年1月1日(默认值),如以下SELECT语句所示:
SELECT OrderID, CAST(Time_Type AS DATETIMEOFFSET(7)) AS ConvertedType FROM Sales.OrderDates |
该结果就显示被转换了的数据:
OrderID ConvertedType 1001 1900-01-01 18:27:10.1234567 +00:00 |
时间被设成默认值,时区偏移值设为+00:00。只有时间值自身才反映出原始值。
你可以看出,DATETIMEOFFSET数据类型和DATE、TIME以及DATETIME2数据类型大大扩展了SQL Server的datetime容量。现在你可以将日期和时间值当作独立值来运用,运用范围更广的日期值并将time值定义得更加精确。想查询更多有关这些数据类型的信息,请查看数据Microsoft SQL Server 2008联机丛书。
翻译
相关推荐
-
如何解决和避免SQL Server数据库死锁
学习如何避免SQL Server数据库死锁的第一步是做好准备工作。根据SQL Server专家的说法,了解死锁 […]
-
如何使用SQL Server数据库脚本创建数据库?
你可以手工创建SQL Server数据库,但懂得如何设置数据库脚本是十分必要的。本文是执行数据库创建脚本所涉及的步骤。
-
如何为你的数据库事务日志减肥?
在大多数SQL Server的工作环境中,尤其是在OLTP环境中,数据库的事务日志性能出现瓶颈时往往会导致事务完成需要更多的时间。
-
SQL Server 2008将退出微软主流数据库支持
你的企业是否还在运行SQL Server 2008?请注意微软为SQL Server 2008提供的主流技术支持服务将于今年的7月8日正式结束。