关闭 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

    上一篇返回首页 下一篇

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

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    SQL汉字转换为拼音的函数

    windows 7系统无法运行Photoshop CS3的解决方法

    巧用MySQL加密函数对Web网站敏感数据进行保护

    MySQL基础知识简介

    Windows7和WinXP下如何实现不输密码自动登录系统的设置方法介绍

    windows 7系统ip地址冲突怎么办?windows 7系统IP地址冲突问题的

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

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