文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

DateTime存储格式是什么

2024-04-02 19:55

关注

DateTime存储格式是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

  什么是DateTime存储格式

  在讲解DateTime存储格式之前,需要纠正一个概念。组成DateTime类型的各个部分:year,Month,day,hour,minute,second,millisecond,不是独立存储。相反,DateTime作为整体,用两个4byte整数存储。

  一个单独的DateTime类型需要8byte存储,前4个byte存储1900-1-1之前或者之后的日期信息。后4个byte存储一天内的时间信息,Datetime中的时间可以精确到1/3millisecond。DateTime类型支持的数据范围是:1753年1月1日至9999年12月31日。为什么是1753年呢?从技术角度完全可以支持更早的日期。1753年的限制主要是从Julian到格林尼治时间的转换。

  SmallDateTime类型使用4byte类型的,前两个byte存储从1900年1月1日至今的日期,后两个byte可以精确到minute存储时间信息。SmallDateTime类型表示的数据范围为:1900-1-1至2079-6-1。

  如何使用DateTime

  DateTime的使用是比较复杂的一件事情。如何正确的表示日期呢?当输入如“2006061123:59:59:59:999”这样一个不能精确表示的内容时,会发生什么呢?怎样将日期和时间分开呢?接下来将会对这些问题进行讨论。

  1.Literals

  在T-SQL中表示一个DateTime内容的输入,是一件非常tricky(不知道怎么翻译)的事情。在一个需要DateTime类型的Insert或者Update语句中,输入一个字符串表示日期内容时,数据库系统会隐式完成数据类型之间的转换。当然,当存在多个操作数时,操作直接的优先级取决于操作数的数据类型。DateTime类型的优先级要高于String类型。当DateTime类型数据和Stirng类型数据进行比较时,String类型隐式转换为DateTime类型。

  在表示DateTime类型数据时,存在着不同的转换,这样增加了事情的复杂性。例如:“02/12/06”对于不同的人有不同的含义。在将此字符串转换为DateTime类型时,SQLServer会根据会话的语言设置(langeagesettingsofsession)进行相应的转换。会话语言取决于登陆账者的默认语言。但此设置可以通过SetLanguage选项进行修改。我们也可以通过设置SetDate-Format选项,控制DateTime如何转换。SetLanguage选项会隐式设置Date-Format符合语言习惯。

  例(来自Microsoftmsdn):

  Declare@todayvarchar(10)set@today='12/3/2007'setlanguageitalianselectdatename(month,@today)as'monthname'setlanguageus_englishselectdatename(month,@today)as'monthname'gooutput:monthname1.marzomonthname1.December

  虽然,我们可以通过Set选项控制DateTime类型数据的转换,但是,我们需要注意到,Set选项会修改整个会话的语言设置。那么,会话中依赖默认语言设置的代码,在Setlanguage操作后,将会怎么样呢?在国际应用中,关于这方面的考虑是非常重要的。

  因此,在编写代码时,我尽可能的书写不依赖系统设置和转换的代码。在SQLServer中,DateTime有两种格式,不依赖于系统设置。我比较倾向于在各个日期部分之间没有分隔符的格式,如“[yy]yymmdd[hh:mi:[ss][.mmm]]”,具体的数据如“20060312”,“060312”,“2006031223.59.59.999”等等。DateFormat和language设置不会影响此种格式的字符串。假如需要在年份,月份等之间显示分隔符,建议使用以下格式“yyyy-mm-ddThh:mi:dd[.mmm]”,具体的数据如:“2006-03-12T14:23:05”。(注,“yyyy-mm-ddThh:mi:dd[.mmm]”格式测试下来还是依赖语言设置,不知道是否是我做的不对.)

  除Set选项外,我们还可以使用Convert方法显示转换DateTime数据为不同的格式。如Convert(datetime,'12/02/2006',3).返回结果“2006-02-1200:00:00.000”.

关于DateTime存储格式是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯