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

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

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