T-SQL Programming 1:DateTime Datatype part1

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

  1. DateTime存储格式的概念混乱。
  2. DateTime显示格式的转换。
  3. 有关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):

  1. Declare @today varchar(10)  
  2. set @today='12/3/2007' 
  3. set language italian  
  4. select datename(month,@today) as 'month name' 
  5. set language us_english  
  6. select datename(month,@today) as 'month name' 
  7. go  
  8. output :   
  9.   month name              
  10. 1.  marzo  
  11.   month name 
  12. 1.  December  
  13.  

虽然,我们可以通过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

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/240848.html<

赞 (0)
管理的头像管理
上一篇2025-04-24 01:43
下一篇 2025-04-24 01:44

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注