SQLServer2008中的新日期数据类型

上传人:宝路 文档编号:3506442 上传时间:2017-08-06 格式:DOCX 页数:6 大小:83.13KB
返回 下载 相关 举报
SQLServer2008中的新日期数据类型_第1页
第1页 / 共6页
SQLServer2008中的新日期数据类型_第2页
第2页 / 共6页
SQLServer2008中的新日期数据类型_第3页
第3页 / 共6页
SQLServer2008中的新日期数据类型_第4页
第4页 / 共6页
SQLServer2008中的新日期数据类型_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《SQLServer2008中的新日期数据类型》由会员分享,可在线阅读,更多相关《SQLServer2008中的新日期数据类型(6页珍藏版)》请在金锄头文库上搜索。

1、摘要你是否曾经想在数据库中存储一个日期而没有时间部分,或者想存储一个时间值希望有更高的精度?在 SQL Server 2008 的介绍中,微软介绍了一些新的日期数据类允许你只存储一个日期、更高精度的时间值等。这些新的数据类型为你存储日期和时间相关信息提供了一些附加选项。在本篇文章中,我将介绍这些新的日期数据类型以及与旧版本的 SQL Server 中现有的数据类型进行比较。回顾旧的日期数据类型在我们开始讨论 SQL Server 2008 中新的日期数据类型之前,先来回顾一下 SQL Server 2005 中以及更老版本中提供的两种日期数据类型,这些旧的数据类型是 DATETIME 和SMA

2、LLDATETIME,这两个数据类型在 SQL Server 2008 中仍然可以使用。DATETIME 数据类型存储把日期和时间部分作为一个单列值在一起存储,该数据类型支持日期从 1753 年 1 月 1 日到 9999 年 12 月 31 日,时间部分的精确度是 3.33 毫秒,它需要8 字节的存储空间。SMALLDATETIME 数据类型比起 DATETIME 类型来说需要更少的存储空间,只有 4 字节,但是支持更小的日期和时间范围。SMALLDATETIME 只支持日期从 1900 年 1 月 1 日到 2079 年 6 月 6 日,时间部分只能够精确到分钟。这两种有限的日期格式限制了

3、你在存储更早日期以及更高精度的时间时的选择,它们的不足之处使得难以从其它支持不同日期和时间范围的数据结构进行数据迁移,与 SQL Server 2008 中新的日期数据类型相比,在存储日期和时间时有了更多的选择。 -DATITIME2DATETIME2 数据类型是对 DATETIME 数据类型的一个扩展,该新的数据类型扩展了可以接受日期的范围和在日期/时间值的时间部分添加附加精度。DATETIME2 列支持日期从0001-01-01 到 9999-01-01。扩大的日期范围现在允许你存储更早的日期而无需使用一些创造性的编码算法。DATETIME2 中的时间部分的精确度依赖于你如何定义 DATE

4、TIME2 列,时间部分能够存储一个只有小时、分钟和秒的时间值,或者它能够支持在不同的精确定存储微秒,最多有7 位小数,微妙可以向下精确到 100 纳秒。使用 DATETIME2 数据类型你可以使用不同的长度字符存储和显示日期,从 19(YYYY-MM-DD hh:mm:ss)到 27(YYYY-MM-DD hh:mm:ss.0000000)。这依赖于不同数量的精度存储需要一定的磁盘开销。在 DATETIME2 列中存储不同的精度时需要在定义列时指定一个长度,我们可以像 DATETIME2(X)来指定精度,其中 X 代表的是精度长度,可以从 0到 7。显示长度和存储空间的关系如下表所示:正如上

5、表所示,DATETIME2 列存储一个日期/时间值的磁盘空间开销是从 6-8 字节,它取决于你想要保留多少时间精度。DATETIME2(3)格式等同于我们在旧版本的 SQL Server 中使用的 DATETIME 格式,但是使用 DATETIME2(3)可以支持精确度到 1 毫秒,而旧版本中的 DATETIME 格式只能精确到 3.33 毫秒。注意 DATETIME2(3)只需要 7 字节的磁盘开销,而 DATETIME 格式需要 8个字节,现在,这意味着你可以存储与较早发布的 SQL Server 相同的日期和时间值并且能够节省磁盘空间。使用 DATETIME(7)格式允许你存储日期类型向

6、上精确到 100 纳秒,尽管增加了精度,但是你不能保证在一张表中的一个时间值是唯一的,当使用 DATETIME(7)格式时仍然可能在同一张表中存储两条具有相同时间的不同的记录。此处是一个如何使用 DATETIME2 不同的精度值来显示不同的时间格式:DECLARE D0 datetime2(0) = 2008-05-10 06:59:11.1234567;DECLARE D1 datetime2(1) = 2008-05-10 06:59:11.1234567;DECLARE D2 datetime2(2) = 2008-05-10 06:59:11.1234567;DECLARE D3 da

7、tetime2(3) = 2008-05-10 06:59:11.1234567;DECLARE D4 datetime2(4) = 2008-05-10 06:59:11.1234567;DECLARE D5 datetime2(5) = 2008-05-10 06:59:11.1234567;DECLARE D6 datetime2(6) = 2008-05-10 06:59:11.1234567;DECLARE D7 datetime2(7) = 2008-05-10 06:59:11.1234567;PRINT D0;PRINT D1;PRINT D2;PRINT D3;PRINT D

8、4;PRINT D5;PRINT D6;PRINT D7;当运行上述代码时将会得到如下结果:2008-05-10 06:59:112008-05-10 06:59:11.12008-05-10 06:59:11.122008-05-10 06:59:11.1232008-05-10 06:59:11.12352008-05-10 06:59:11.123462008-05-10 06:59:11.1234572008-05-10 06:59:11.1234567此处你可以看到,不同数量的精度显示不同的微秒,注意当我在 DECLARE 语句中设置默认值时 DATETIME(4), DATETIM

9、E(5) 和 DATETIME(6)做了一些舍入。使用 DATETIME2 现在可以让你存在日期和时间在一列时有了更多的选择,现在如果你只想存储一个日期和精确到秒的时间,你可以使用 DATETIME(0)来完成此需求而无需编写额外的代码以及浪费昂贵的磁盘开销。DATE你是否曾经想只存储日期而没有时间?如果是的话,使用旧的日期数据类型将无法完成。现在在 SQL Server 2008 中你可以使用 DATE 数据类型, DATE 数据类型允许只存储一个日期值,它支持的日期范围从 0001-01-01 到 9999-12-31,存储 DATE 数据类型磁盘开销只需 3 个字节,如果你只需要存储日期

10、值而没有时间,使用 DATE 可以比SMALLDATETIME 节省一字节的磁盘空间。这里用一个示例来展示如何显示 DATE 的值SET NOCOUNT ON;DECLARE D DATE = 2001-03-1;PRINT D;SELECT CONVERT(char(10),D,120) DATEONLY, D DATE-N-TIME;运行上述代码将会得到如下结果2001-03-01DATEONLY DATE-N-TIME- -2001-03-01 2001-03-01 00:00:00.000这里你可以看到 PRINT 语句显示日期使用 YYYY-MM-DD 格式,但是 SELECT 语句

11、要求你使用 CONVERT 函数把 DATE 变量转换为 YYYY-MM-DD 格式,正如你所看到的,如果你使用 SELECT 只显示一个 DATE 变量,最后的输出结果仍然包含时间部分,这个功能在所有新的日期和时间数据类型中是一致的。TIMESQL Server 2008 现在有了一个 TIME 数据类型,它允许你只存储一个时间值而没有时间。如果想要存储一个特定的时间信息而不涉及具体的日期时,这将非常的有用。TIME 数据类型存储使用 24 小时制,它并不关心时区,支持高达 100 纳秒的精确度。TIME 数据类型支持从 0 到 7 不同的精度,就像 DATETIME2 格式,它的磁盘开销是

12、 3 到 5 个字节,取决与精度。TIME 列的长度与精度如下表所示:此处是一个如何使用不同的 DATETIME2 精度值来显示不同的时间格式的示例:DECLARE T0 time(0) = 16:59:11.1234567;DECLARE T1 time(1) = 16:59:11.1234567;DECLARE T2 time(2) = 16:59:11.1234567;DECLARE T3 time(3) = 16:59:11.1234567;DECLARE T4 time(4) = 16:59:11.1234567;DECLARE T5 time(5) = 16:59:11.12345

13、67;DECLARE T6 time(6) = 16:59:11.1234567;DECLARE T7 time(7) = 16:59:11.1234567;PRINT T0; PRINT T1; PRINT T2; PRINT T3; PRINT T4; PRINT T5; PRINT T6; PRINT T7;当运行上述代码时将会得到如下结果:16:59:1116:59:11.116:59:11.1216:59:11.12316:59:11.123516:59:11.1234616:59:11.12345716:59:11.1234567注意 TIME(4),TIME(5)和 TIME(6

14、)在显示时进行了精度截断,这与我们前面看到的DATETIME2 的行为是一致的。只存储时间部分的 TIME 数据类型列现在允许我们验证SQL Server 的时间值以确保它们包含的是有效的时间,并且能够节省空间。DATETIMEOFFSET最后新的日期数据类型是 DATETIMEOFFSET 数据类型,此数据类型让你存储的日期和时间(24 小时制)是时区一致的。时间部分能够支持如 DATETIME2 和 TIME 数据类型那样的高达 100 纳秒的精度。DATETIMEOFFSET 需要 8 到 10 字节的磁盘空间开销,这完全取决于你定义的时间部分的精度,如下表所示:时区一致是指时区标识符是

15、存储在 DATETIMEOFFSET 列上,时区标识是代表了一个-|+hh:mm 指定,一个有效的时区范围是从-14 :00 到+14:00 ,这个值是增加或者减去 UTC以获取本地时间。如需有关时间的转换,请参见“使用日期和时间” 主题在联机丛书。总结使用 SQL Server 2008,现在有了更多的数据类型选择,可以用来存储你的日期和时间数据。你可以使用 DATE 数据类型只存储一个日期,或者 TIME 数据类型只存储一个时间值。在这些新的数据类型中时间部分现在支持的精度可以达到 100 纳秒。如果有需要存储日期需要与 SQL Server 的时区保持一致,可以使用 DATETIMEOFFSET 数据类型,有了这些新的日期/时间数据类型,你应该能够找到好的解决方案,以帮助你存储你的日期使用正确的格式而不需要写大量的自定义代码。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号