SQL Server 2008对日期时间类型的改进

上一篇 / 下一篇  2008-01-28 13:23:11 / 个人分类:SQL Server 2008

微软在备受多年的争议后,终于对日期时间数据类型开刀了,在新版的SQL Server 2008中一口气增加了4种新的日期时间数据类型,包括:

  • Date:一个纯的日期数据类型。
  • Time:一个纯的时间数据类型。
  • DateTime2:新的日期时间类型,将精度提到到了100纳秒。
  • DateTimeOffset:新的日期时间类型,在DateTime2的基础上增加了时区部分。

下面是在SQL Server 2008中日期时间数据类型的一个简单汇总表:

数据类型格式取值范围精度存储尺寸
dateyyyy-mm-dd0001-1-1ITPUB个人空间9n(t2x H4t k.| X)m M
9999-12-31
1天3字节
timehh:mm:ss.nnnnnn0:0:0.000000
EP6}OL023:59:59.999999
100纳秒3-5字节
smalldatetimeyyyy-mm-dd
Q!_[T&I9p1n;L0hh:mm:ss
1900-1-1ITPUB个人空间b9vS[qHW;u*F|%z
2079-6-6
1分钟4字节
datetimeyyyy-mm-dd
Y2Q{s/L-I0hh:mm:ss:nnn
1753-1-1ITPUB个人空间 ]7ME^%{7m#@
9999-12-31
0.00333秒8字节
datetime2yyyy-mm-ddITPUB个人空间,Sq8J3L$U at-ru
hh:mm:ss:nnnnnn
0001-1-1
d4o hcY9[ J%^] ~09999-12-31
100纳秒6-8字节
datetimeoffsetyyyy-mm-dd
,tLjUk#THBfsVe0hh:mm:ss:nnnnnnITPUB个人空间8d-X*LnP$P0]"`c
+|- hh:mm
0001-1-1ITPUB个人空间#a"})v `2u'|3zi
9999-12-31
A9J*`'}h0(全球标准时间)
100纳秒8-10字节

为了使用这些数据类型,SQL Server 2008同时还引入了一系列的T-SQL函数。

三个用于获得高精度系统时间的函数(因为是这三个函数都是取的操作系统时间,所以精度仅能达到10毫秒):

  • SYSDATETIME:返回运行SQL Server实例的服务器的本地时间,数据类型是datetime2(7),不包含时区信息。
  • SYSDATETIMEOFFSET:返回运行SQL Server实例的服务器的本地时间及时区信息,数据类型是datetimeoffset(7)。
  • SYSUTCDATETIME:返回运行SQL Server实例的服务器的标准世界时间,数据类型是datetime2(7)。

用于时区转换的函数:

  • SWITCHOFFSET(datetimeoffset,time_zone):根据输入的世界时间以及时区信息返回某个特定时区的数据,例如SWITCHOFFSET('2008-1-1 0:0:0 + 8:00', '-07:00')返回值将是'2007-12-31 9:00 -07:00',这样我们就晓得我们元旦的时候老美的时间只是早上9:00。(有个有趣的情况是SWITCHOFFSET函数time_zone参数小时的前导0时不能省略的,就我们刚才用的那个例子如果time_zone参数写成'7:00'就会报错,必须写成'07:00',不过datetimeoffset数据里那个时区部分小时的前导0时可以省略的,也就是说'2008-1-1 0:0:0 + 8:00'和'2008-1-1 0:0:0 + 08:00'都是可以接受的,对于时区中分钟部分也是如此。不过建议大家养成良好的编码习惯,所有前导0都不要省略。)
  • TODATETIMEOFFSET(datetime,offset):根据输入的日期时间参数值和时区参数值返回一个世界时间值。例如TODATETIMEOFFSET('2008-1-1 0:0:0', '+08:00')返回值是'2008-1-1 0:0:0 + 08:00'。

顺便列举一下SQL Server 2005中已经提供的日期时间函数,不过就不做介绍了:

  • 用于获取系统时间的函数:CURRENT_TIMESTAMP,GETDATE,GETUTCDATE
  • 返回日期时间的指定部分:DATENAME,DATEPART,DAY,MONTH,YEAR
  • 计算日期时间差异的函数:DATEDIFF, DATEADD (必须注意的是datetime、smalldatetime数据类型支持+和-运算符,但是对于date、time、datetime2、datetimeoffset则不支持。)
  • 对日期时间进行计算的函数:DATEADD
  • 设置日期时间显示格式的函数:@@DATEFIRST,SET DATEFIRST,SET DATEFORMAT,@@LANGUAGE,SET LANGUAGE,sp_helplanguage
  • 用于确认日期时间数据格式的函数:ISDATE

TAG: 2008 Server server SQL sql

引用 删除 wqquake   /   2008-02-22 20:24:56
不错,时间类型很全面了。很好很强大
引用 删除 wqquake   /   2008-02-22 20:23:53
5
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar