科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL Server 2008中新的日期时间数据类型(2)

SQL Server 2008中新的日期时间数据类型(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SQL Server 2008中DATETIME功能的最大转变就是引入了四种DATETIME数据类型,分别为DATE、TIME、DATETIMEOFFSET和DATETIME2;此外还增加了新的DATETIME函数功能……

作者:IT专家网 来源:IT专家网 2008年1月29日

关键字: SQL 2008 SQL SQL Server SQL Server 2008

  • 评论
  • 分享微博
  • 分享邮件
 SQL Server 2008中DATETIME功能的最大转变就是引入了四种DATETIME数据类型,分别为DATE、TIME、DATETIMEOFFSET和DATETIME2;此外还增加了新的DATETIME函数功能……

  DATETIMEOFFSET数据类型

  如果把日期和时间数据保存在一列里,是不会提示该日期和时间属于哪一个时区的。时区的提示非常重要,特别是当你处理数据包含了多个不同时区的国家时。新的DATETIMEOFFSET数据类型可以定义一个日期和时间组合,其中时间以24小时制显示,并带有时区提示。下面的语句说明了DATETIMEOFFSET数据类型的用法:

  DECLARE @dt DATETIMEOFFSET(0)
  SET @dt = '2007-12-04 21:20:30 -1:00'
  DECLARE @dt1 DATETIMEOFFSET(0)
  SET @dt1 = '2007-12-04 21:20:30 +5:00'
  SELECT DATEDIFF(hh,@dt,@Dt1)

  DateTime函数

  目前我们可以在SQL Server 2005和SQL Server 2000中使用GETDATE函数来查询当前的日期和时间。此外,在SQL Server 2005中,还有另外几个类似的日期时间函数,分别为:CURRENT_TIMESTAMP、DATEADD、DATEDIFF、DATENAME、DATEPART、GETUTCDATE、DAY、 MONTH和YEAR。而在SQL Server 2008中,除了上述这些函数外,又新增了五个函数,分别为SYSDATETIME、SYSDATETIMEOFFSET、SYSUTCDATETIME、SWITCHOFFSET和TODATETIMEOFFSET。其中SYSDATETIME函数返回目前系统的时间戳,不带时区提示,能够精确到毫秒级。SYSDATETIMEOFFSET函数和SYSDATETIME函数功能类似,不过包含了时区值。SYSUTCDATETIME返回以世界标准时间(又称协调世界时,也就是格林威治时间)表示的日期和时间,也精确到毫秒级,是根据当前SQL Server运行所在地服务器所设置的本地时间和时区得来的。SYSDATETIME和SYSUTCDATETIME两个函数返回的都是DATETIME2数据类型,而SYSDATETIMEOFFSET函数返回DATETIMEOFFSET数据类型。

  SWITCHOFFSET函数

  SWITCHOFFSET函数返回DATETIMEOFFSET数据类型的值,不再根据存储的时区偏移值取值,而是根据设定的新时区偏倚值来取值。看看下面这个语句:

  SELECT SYSDATETIMEOFFSET(), SWITCHOFFSET (SYSDATETIMEOFFSET(), '-14:00')

  该脚本返回两个列,第一列是根据世界标准时间得到的当前日期和时间值,第二列则是根据给定的时区偏移值返回的日期时间值。

  TODATETIMEOFFSET函数

  TODATETIMEOFFSET函数可以把本地日期或时间值以及特定的时区偏移值转变为一个datetimeoffset值。运行以下脚本,你会看到返回的结果中除了当前日期和时间外,还增加了时区值。

  SELECT TODATETIMEOFFSET (GETDATE(),'+11:00')

  转换函数

  CONVERT函数可以从DATETIME数据类型的组成中抽取时间值或者日期值。运行以下脚本,返回结果的第一列为当前日期,第二列为当前时间。

  SELECT CONVERT(date, GETDATE()),CONVERT(time, GETDATE())

  使用新DATETIME数据类型进行转换的注意事项

  如果你要增加DATE和TIME列,不能够像SMALLDATETIME数据类型一样加载,否则会返回以下的错误信息:Operand data type date is invalid for add operator。

  你可以尝试把这两列设置为浮点型数据,一起存入,并把结果转换成SMALLDATETIME或DATETIME列。(记住,当SMALLDATETIME数据存储成浮点型时,日期值为整数部分而时间值为小数部分)不过,这也会返回一个错误信息:Explicit conversion from data type date to float is not allowed。

  正确的做法是把两列都转换为SMALLDATETIME数据,并一起存入。例如使用以下脚本,你就可以得到输出结果:

  Declare @dt as DATE
  Set @dt = getdate()
  Declare @dtt as TIME
  Set @dtt = getdate()
  Select cast(@dt as smalldatetime) + cast(@dtt as smalldatetime)

 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章