关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL语言 »T-SQL Programming 1:DateTime Datatype part1

    T-SQL Programming 1:DateTime Datatype part1

    2011-04-01 15:53:00 出处:ITJS
    分享

    DateTime 是使用最多和出现问题最多的数据类型之一。主要存在以下问题:

    DateTime存储格式的概念混乱。 DateTime显示格式的转换。 有关DateTime查询问题。

    一、DateTime存储格式

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

    一个单独的DateTime类型需要 8byte存储,前4个byte存储 1900-1-1之前或者之后的日期信息。 后4个byte存储 一天内的时间信息,Datetime 中的时间可以精确到1/3 millisecond。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的使用是比较复杂的一件事情。如何正确的表示 日期呢? 当输入如“20060611 23:59:59:59:999”这样一个不能精确表示的内容时,会发生什么呢?怎样将日期和时间分开呢?接下来将会对这些问题进行讨论。

    1.Literals

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

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

    例(来自Microsoft msdn):

    Declare @today varchar(10)  set @today='12/3/2007' set language italian  select datename(month,@today) as 'month name' set language us_english  select datename(month,@today) as 'month name' go  output :     month name              1.  marzo    month name 1.  December   

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

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

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

    原文链接:http://www.cnblogs.com/fisher3/archive/2011/03/27/1996815.html

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Edge浏览器百度被劫持/篡改怎么办,地址后边跟着尾巴#tn=68018901_7_oem_dg

    Google Chrome 在 iPhone 上新增了 Safari 数据导入选项

    Windows 11专业版 KMS工具激活产品密钥的方法

    DEDECMS安全策略官方出品

    Microsoft Text Input Application 可以关闭吗?

    新版本QQ如何关闭自带的浏览器?

    C++编程语言中continue的用法和功能,附举例示范代码

    c++ map 的数据结构、基本操作以及其在实际应用中的使用。

    C语言如何避免内存泄漏、缓冲区溢出、空指针解引用等常见的安全问题

    C语言中的break语句详解

    IT头条

    马斯克2026最新采访总结:2040年,全球机器人数量将突破100亿台

    23:52

    专家解读|规范人工智能前沿业态健康发展的新探索:解读《人工智能拟人化互动服务管理暂行办法》

    00:54

    用至强 6高存力搞定MoE卸载!

    17:53

    美国将允许英伟达向中国“经批准的客户”出售H200 GPU

    02:08

    苹果与微信就15%手续费达成一致?腾讯未置可否

    22:00

    技术热点

    PHP 和 Node.js 的10项对比挑战

    Javascript闭包深入解析及实现方法

    windows 7、windows 8.1手动增加右键菜单功能技巧

    MYSQL出错代码大汇总

    windows 7假死机怎么办 windows 7系统假死机的原因以及解决方法

    Ubuntu(Linux)下配置IP地址的方法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。