【GHS】SQL Server中datetimeset转换dat

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2020-12-30

那么我们通过下面例子来给你简单介绍一下,datetimeoffset通过不同方式转换为datetime有啥区别,具体脚本如下: DECLARE @p1 DATETIMEOFFSET;DECLARE @p2 DATETIME;DECLARE @p3 DATETIME2; SET @p1='2020-10-03 11:10:36.9200000 +08:00'SET @p2=@p1;SET @p3=@p1; SELECT @p1 AS '@p1' ,@p2 AS '@p2' ,CAST(@p1 AS DATETIME) AS 'datetimeoffset_cast_datetime' ,CONVERT(DATETIME, @p1, 1) AS 'datetimeoffset_convert_datetime' 如下截图所示,通过CONVERT函数将datetiemoffset转换为datetime,你会发现上面这种方式丢失了时区信息,它将datetimeoffset转换为了UTC时间了。官方文档介绍:转换到datetime 时,会复制日期和时间值,时区被截断。 注意:datetiemoffset转换为datetime2也是同样的情况,这里不做赘述了。[图片] 所以,最开始,我们构造的案例中,出现那种现象是因为@p1和CREATE_TIME比较时,发生了隐式转换,datetiemoffset转换为datetime,而且转换过程中时区丢失了,此时的SQL实际等价于CREATE_TIME ='2020-10-03 03:10:36.920'了,那么怎么解决这个问题,如果在不改变数据类型的情况下,有什么解决方案解决这个问题呢? 方案1:使用CAST转换函数。 DECLARE @p1 DATETIMEOFFSET;SET @p1='2020-10-03 11:12:36.9200000 +08:00'SELECT * FROM dbo.TESTWHERE CREATE_TIME =CAST(@p1 AS DATETIME) 方案3:SQL Server 2016(13.x)或以后的版本可以使用下面方案。注意之前的SQL Server版本不支持这种写法. DECLARE @p1 DATETIMEOFFSET;SET @p1='2020-10-03 11:12:36.9200000 +08:00'SELECT * FROM dbo.TESTWHERE CREATE_TIME = CONVERT(DATETIME,

成为第一个回答人

评论

登录后才可发表内容
  • 主题

    106

  • 帖子

    82

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0592s Mem:2041Kb