【TechTarget中国原创】理解SQL Server的日期/时间数据类型是有一定难度的,尤其是混合使用TIMESTAMP的时候。在关于日期/时间的这一系列的第一部分,你将了解到关于数据是如何存储在DATETIME和SMALLDATETIME的基础知识,以及大致地了解TIMESTAMP数据类型——它经常与两种主要的日期/时间数据类型相混淆。
在SQL Server 2005使用日期/时间值有时候会很混淆。因为日期/时间数据类型同时存储日期和时间值,而这些值的操作并不总是一个简单的过程,或者看起来不简单的。
当操作这类数据时,对于这些数据类型有一个基本的了解是很有重要的。在本文中,我将介绍SQL Server中的两种基本的日期/时间数据类型——DATETIME和SMALLDATETIME,以及数据是如何在这两种类型中存储的。另外,我还将概括介绍TIMESTAMP数据类型,这样你就可以了解到它与两种日期/时间数据类型的不同。
SQL Server的DATETIME数据类型
毫无疑问,DATETIEM数据类型对你的应用是最有用的。DATETIME字段(或一个变量)中的值是以两个4位整型存储的。第一个整型表示日期,而第二个整型表示时间。
我们是从基准日期1900年1月1日开始的计算日期的整数的。整数表示该日期之前或之后的天数。因此,DATETIME数据类型仅仅支持由4位范围整数表示的日期。这就意味着DATETIME字段的一个日期必须处于1735年1月1日到9999年12月31日之间。
第二个在DATETIME值的整数,即时间整数,存储了午夜后的1/300-秒单位的数字。这就意味着时间是以毫秒为单位存储的,并精确到3.33毫秒。因此,当你在DATETIME字段中插入一个值,SQL Server将把时间转换成.000、.003或.007秒。下面的表显示了SQL Server是圆整时间值的几个例子:
Time example | Rounded to: |
10:10:10.989 10:10:10.990 10:10:10.991 | 10:10:10.990 |
10:10:10.992 10:10:10.993 10:10:10.994 | 10:10:10.993 |
10:10:10.995 10:10:10.996 10:10:10.997 10:10:10.998 | 10:10:10.997 |
10:10:10.999 | 10:10:11.000 |
|
|---|
这个表的时间是以小时、分钟、秒钟顺序列出的,并且适当地将秒精确到毫秒。
正如你所看到的,DATETIME字段中的两个整数一起表示一个特定日期的某一特定时间。当你从一个DATETIME字段中检索一个值时,它将日期和时间显示为一系列的数字。比如,下面的Transact-SQL 语句就是从DatabaseLog 表中的PostTime字段检索数据,这个表也是AdventureWorks示例数据库中的一部分:
SELECT PostTime FROM dbo.DatabaseLog WHERE DatabaseLogID = 1 |
PostTime字段是配置为DATETIME数据类型的。当你在SQL Server Management Studio中检索值时,所检索到的值在默认情况下以下面的格式返回:
PostTime ----------------------- 2005-10-14 01:58:27.567 (1 row(s) affected) |
注意,日期显示首先是年(2005),接着是月(10),然后是日(14)。然后日期后面是时间,也就是1小时、58分和27.567秒。值作为一个整体,它所指的是2005年10月14日,大约是凌晨1:58的日期和时间。