首页 > 语言 > 关键词  > SQL最新资讯  > 正文

SQL Server 2008中的新日期数据类型

2009-03-16 15:12 · 稿源:IT168

你是否曾经想在数据库中存储一个日期而没有时间部分,或者想存储一个时间值希望有更高的精度?在SQL Server 2008的介绍中,微软介绍了一些新的日期数据类允许你只存储一个日期、更高精度的时间值等。这些新的数据类型为你存储日期和时间相关信息提供了一些附加选项。在本篇文章中,我将介绍这些新的日期数据类型以及与旧版本的SQL Server中现有的数据类型进行比较。

回顾旧的日期数据类型

在我们开始讨论SQL Server 2008中新的日期数据类型之前,先来回顾一下SQL Server 2005中以及更老版本中提供的两种日期数据类型,这些旧的数据类型是DATETIME和SMALLDATETIME,这两个数据类型在SQL Server 2008中仍然可以使用。

DATETIME数据类型存储把日期和时间部分作为一个单列值在一起存储,该数据类型支持日期从1753年1月1日到9999年12月31日,时间部分的精确度是3.33毫秒,它需要8字节的存储空间。SMALLDATETIME数据类型比起DATETIME类型来说需要更少的存储空间,只有4字节,但是支持更小的日期和时间范围。SMALLDATETIME只支持日期从1900年1月1日到2079年6月6日,时间部分只能够精确到分钟。

这两种有限的日期格式限制了你在存储更早日期以及更高精度的时间时的选择,它们的不足之处使得难以从其它支持不同日期和时间范围的数据结构进行数据迁移,与SQL Server 2008中新的日期数据类型相比,在存储日期和时间时有了更多的选择。

DATITIME2

DATETIME2数据类型是对DATETIME数据类型的一个扩展,该新的数据类型扩展了可以接受日期的范围和在日期/时间值的时间部分添加附加精度。DATETIME2列支持日期从0001-01-01到9999-01-01。扩大的日期范围现在允许你存储更早的日期而无需使用一些创造性的编码算法。

DATETIME2中的时间部分的精确度依赖于你如何定义DATETIME2列,时间部分能够存储一个只有小时、分钟和秒的时间值,或者它能够支持在不同的精确定存储微秒,最多有7位小数,微妙可以向下精确到100纳秒。

使用DATETIME2数据类型你可以使用不同的长度字符存储和显示日期,从19(YYYY-MM-DD hh:mm:ss)到27(YYYY-MM-DD hh:mm:ss.0000000)。这依赖于不同数量的精度存储需要一定的磁盘开销。在DATETIME2列中存储不同的精度时需要在定义列时指定一个长度,我们可以像DATETIME2(X)来指定精度,其中X代表的是精度长度,可以从0到7。显示长度和存储空间的关系如下表所示:

图1

正如上表所示,DATETIME2列存储一个日期/时间值的磁盘空间开销是从6-8字节,它取决于你想要保留多少时间精度。

DATETIME2(3)格式等同于我们在旧版本的SQL Server中使用的DATETIME格式,但是使用DATETIME2(3)可以支持精确度到1毫秒,而旧版本中的DATETIME格式只能精确到3.33毫秒。注意DATETIME2(3)只需要7字节的磁盘开销,而DATETIME格式需要8个字节,现在,这意味着你可以存储与较早发布的SQL Server相同的日期和时间值并且能够节省磁盘空间。

使用DATETIME(7)格式允许你存储日期类型向上精确到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 datetime2(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 @D4;

PRINT @D5;

PRINT @D6;

PRINT @D7;

当运行上述代码时将会得到如下结果:

2008-05-10 06:59:11

2008-05-10 06:59:11.1

2008-05-10 06:59:11.12

2008-05-10 06:59:11.123

2008-05-10 06:59:11.1235

2008-05-10 06:59:11.12346

2008-05-10 06:59:11.123457

2008-05-10 06:59:11.1234567

此处你可以看到,不同数量的精度显示不同的微秒,注意当我在DECLARE语句中设置默认值时DATETIME(4), DATETIME(5) 和DATETIME(6)做了一些舍入。

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

这里你可以看到PRINT语句显示日期使用YYYY-MM-DD格式,但是SELECT语句要求你使用CONVERT函数把DATE变量转换为YYYY-MM-DD格式,正如你所看到的,如果你使用SELECT只显示一个DATE变量,最后的输出结果仍然包含时间部分,这个功能在所有新的日期和时间数据类型中是一致的。

TIME

SQL Server 2008现在有了一个TIME数据类型,它允许你只存储一个时间值而没有时间。如果想要存储一个特定的时间信息而不涉及具体的日期时,这将非常的有用。TIME数据类型存储使用24小时制,它并不关心时区,支持高达100纳秒的精确度。TIME数据类型支持从0到7不同的精度,就像DATETIME2格式,它的磁盘开销是3到5个字节,取决与精度。TIME列的长度与精度如下表所示:

图1

此处是一个如何使用不同的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.1234567';

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:11

16:59:11.1

16:59:11.12

16:59:11.123

16:59:11.1235

16:59:11.12346

16:59:11.123457

16:59:11.1234567

注意TIME(4),TIME(5)和TIME(6)在显示时进行了精度截断,这与我们前面看到的DATETIME2的行为是一致的。只存储时间部分的TIME数据类型列现在允许我们验证SQL Server的时间值以确保它们包含的是有效的时间,并且能够节省空间。
DATETIMEOFFSET

最后新的日期数据类型是DATETIMEOFFSET数据类型,此数据类型让你存储的日期和时间(24小时制)是时区一致的。时间部分能够支持如DATETIME2和TIME数据类型那样的高达100纳秒的精度。DATETIMEOFFSET需要8到10字节的磁盘空间开销,这完全取决于你定义的时间部分的精度,如下表所示:

图1

时区一致是指时区标识符是存储在DATETIMEOFFSET列上,时区标识是代表了一个[-|+]hh:mm指定,一个有效的时区范围是从-14:00到+14:00,这个值是增加或者减去UTC以获取本地时间。如需有关时间的转换,请参见“使用日期和时间”主题在联机丛书。

More Date and Time Choices

使用SQL Server 2008,现在有了更多的数据类型选择,可以用来存储你的日期和时间数据。你可以使用DATE数据类型只存储一个日期,或者TIME数据类型只存储一个时间值。在这些新的数据类型中时间部分现在支持的精度可以达到100纳秒。如果有需要存储日期需要与SQL Server的时区保持一致,可以使用DATETIMEOFFSET数据类型,有了这些新的日期/时间数据类型,你应该能够找到好的解决方案,以帮助你存储你的日期使用正确的格式而不需要写大量的自定义代码。

举报

  • 相关推荐
  • 国内独家AI+操作系统TencentOS Server亮相2025中国国际金融展

    腾讯云TencentOS+Server历经15年技术积累,打造了国内独家AI+操作系统,已在农业银行、招商银行等金融机构核心系统落地应用。该系统具备性能提升、安全稳定等关键能力,支持国产CPU深度优化,实测性能提升9%-25%。其推出的TACO-LLM大模型推理加速器显著降低延迟,在金融信创生态实验室评测中获得权威认证。作为OpenCloudOS社区核心贡献者,TencentOS+Server已适配1697款硬件,覆盖四大架构,并孵化云原生OS"玄湾"等创新项目,成为国产操作系统规模化应用的标杆。

  • 腾讯云TencentOS Server AI,助力荣耀打造高性能AI底座

    随着生成式AI技术爆发式增长,AI大模型开始渗透至手机领域。荣耀基于腾讯云TencentOS Server AI的TACO-LLM加速模块部署DeepSeek-R1等开源大模型,在内部场景应用中实现稳定性、可靠性和推理性能的大幅提升。测试显示,使用TACO-LLM后,首Token延迟最高降低6.25倍,吞吐提升2倍,端到端延迟降低100%。TACO-LLM通过投机采样技术实现大模型"并行"解码,从根本上解决计算密度问题,大幅提升解码效率。荣耀表示该方案打造了高性能AI底座,提供高吞吐低延迟的优化方案,能无缝整合现有大模型部署方案。腾讯云TACO-LLM针对企业级AI模型私有化部署挑战,专门优化了大语言模型内核运行效率。

  • MCP server资源网站去哪找?国内MCP服务合集平台有哪些?

    在人工智能飞速发展的今天,AI模型与外部世界的交互变得愈发重要。一个好的工具不仅能提升开发效率,还能激发更多的创意。今天,我要给大家介绍一个宝藏平台——AIbase(<https://mcp.aibase.cn/>),一个专注于MCP(Model Context Protocol)服务的全球集合平台,它正在悄然改变AI应用开发的格局。 平台精心挑选了全球最受欢迎的MCP服务进行推荐。这些服务经过了市场的检验,具�

  • 首届央国企数智化与转型战略成果发布会在京召开,TencentOS Server展示应用成果

    6月26日,首届央国企数智化转型战略成果发布会在京举行,发布《央国企数智化发展研究报告》等重要成果。腾讯云受邀参会,其自研操作系统TencentOS Server凭借"西游四件套"等创新技术方案获得关注。该系统已实现超1000万套部署,支撑金融、政务等行业国产化需求,具备三大优势:1)性能提升方面,CPU利用率提升15-45%,整机能耗降低5-10%;2)技术创新方面,独创qGPU虚拟化技术可降低60%硬件成本;3)生态适配方面,已完成与国产主流硬件的互认证。目前该系统已助力农业银行等金融机构实现5%-25%性能提升,并成为金融、党政领域首选方案。作为国内三家具备Linux研发能力的厂商之一,腾讯云将持续打磨技术,支撑企业数字化转型需求。

  • MCP协议资源服务去哪找?国内MCP server资源网站推荐

    ​在人工智能技术飞速发展的今天,AI模型与外部工具和服务的交互需求日益增长。为了满足这一需求,一个名为 AIbase 的全球MCP服务器集合平台(https://mcp.aibase.cn/)应运而生,为开发者和企业提供了前所未有的便利和强大的功能支持。

  • 抓住人们对“Soulmate”的渴望,20天入账200万美金?

    6月17日,一款 AI 占星产品 Starla-Call the Universe 进入了 iOS 美国下载总榜前10,当笔者以为这又是一个昙花一现的产品时,它不仅能够持续坚守榜单 Top10长达半个月,而且到了6月24日,另一款产品 Astra-Life Advice 也进入了美榜前10,两款同类产品相继进入 Top10,并双双持续在榜超1周的时间。

  • 83岁老人现场开箱Pura 80:喜欢华为11年 收藏近200部华为手机

    日前,华为Pura 80系列正式发布,这是华为迄今最强的影像旗舰。 据媒体报道,Pura 80系列发布当天,洛阳一位叫宋茂信的老爷爷带着他收藏的9部华为P系列手机来到华为门店,现场开箱洛阳首台Pura 80样机。 宋爷爷表示,Pura 80系列最吸引人的就是一镜双目”,因为华为P系列拍照比较好,我一直喜欢拍照,我要入手一台。 据了解,83岁的宋爷爷是华为的忠实粉丝,喜欢华为已�

  • 边开直播边做实验,单场卖出2200万,小红书有了00后“一姐”

    “李嗲你真的…到底是谁想出来的这么抽象的测评方法?” 当00后的李嗲在直播间里打开UV相机摄像头进行测评防晒霜的时候,被紫外线灯照射的她和付铁寒立马在镜头下变成两个“小黑人”。这一场面引得无数年轻人一边大呼抽象,一边为这场眼见为实的实验买单。 在消费者的支持下,李嗲一路冲上小红书实时买手榜第一,成为小红书电商首个00后“一姐”。这样的成长速度

  • 女儿查分猛超陪考老爸200多分 查分时紧张到“磕巴”

    6月24日,河北一位父亲陪读女儿12年,与女儿一同参加了今年的高考。在高考成绩揭晓的那一刻,这位父亲紧张得说话都“磕巴”了,而女儿的分数却远超父亲200多分,让父亲感慨不已。 当高考成绩揭晓时,这位父亲紧张得手心都冒汗了。他坐在电脑前,一遍又一遍地刷新着查分页面,嘴里还不停地念叨着:“一定要考好啊,一定要考好啊。”而女儿则站在一旁,虽然也有些紧

  • BW2025即将开展,技嘉AORUS雕妹约你3H|3A08 雕宅见

    BilibiliWorld2025将于7月11-13日在上海国家会展中心举办,技嘉AORUS确认参展。现场将带来全新电竞装备体验、热门游戏试玩和1V1对战PK,还有萌妹互动环节。亮点包括:1)"竞速街潮痛车"主题展区,限量发售同款模型;2)首发雕妹国风定制整机,融合东方美学与电竞性能;3)二次元电竞乐园,包含宅舞派对等多元活动。7月8日将公布终极剧透,提前锁定3H|3A08展位,参与互动赢取大奖。这是今夏最燃的电竞狂欢,不见不散!