太阳集团tyc5997|官网【中国】有限公司

解决数据库中日期时间集的日期时间类型转换问
  • 作者:admin
  • 发表时间:2021-01-06 07:53
  • 来源:未知

本文主要介绍了在SQL Server中将日期时间集转换为日期时间类型的问题。这篇文章很详细,对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下

在SQL Server中,当数据类型datetimeoffset转换为datetime类型或datetime2类型时,应特别注意。如果不小心,可能会遇到以下情况。让我们构建一个简单的案例来模拟您可能遇到的情况。

创建表格测试

标识整数标识(1,1)

,创建时间日期时间

,约束主键_测试主键(标识)

);

插入测试(创建时间)

选择“2020-10-03 11:10:36”联合所有

选择“2020-10-03 11:11:36”联合所有

选择“2020-10-03 11:12:36”联合所有

SELECT ' 2020-10-03 11:1:36 ';

DECLARE @ p1 DATETIMEOFFSET

SET @ P1=' 2020-10-03 11:12:36.920000008:00 '

SELECT * FROM dbo。试验

其中CREATE _ TIME=@ p1

如下图所示,您会发现在这个查询SQL中找不到任何记录。我相信之前不熟悉datetimeoffset这种数据类型的人会面临这种现象.

然后我们通过下面的例子给大家简单介绍一下。用不同的方式把datetimeoffset转换成datetime有什么区别?具体脚本如下:

DECLARE @ p1 DATETIMEOFFSET

DECLARE @ p2 DATETIME

DECLARE @ p3 DATETIME2

SET @ P1=' 2020-10-03 11:10:36.920000008:00 '

SET @ p2=@ p1

SET @ p3=@ p1

选择@p1为' @p1 '

,@p2 AS '@p2 '

,CAST(@ P1 AS DATETIME)AS ' DATETIME offset _ CAST _ DATETIME '

,CONVERT(DATETIME,@p1,1)AS ' DATETIME offset _ CONVERT _ DATETIME '

如下图所示,通过使用convert函数将datetiemoffset转换为datetime,您会发现时区信息以上述方式丢失,它将datetimeoffset转换为UTC时间。官方文档介绍:转换为datetime时,会复制日期和时间值,时区会被截断。

注意:datetiemoffset转换为datetime2也是如此,这里就不赘述了。

因此,在开始时,在我们构建的案例中,出现这种现象是因为当@p1与CREATE_TIME比较时,发生了隐式转换,datetiemoffset转换为datetime,并且在转换过程中丢失了时区。这时的SQL其实相当于create _ time=' 2020-10-03 0:10336036.920 ',那又如何

场景1:使用CAST转换函数。

DECLARE @ p1 DATETIMEOFFSET

SET @ P1=' 2020-10-03 11:12:36.920000008:00 '

SELECT * FROM dbo。试验

其中CREATE_TIME=CAST(@p1为日期时间)

场景2:2:CONVERT函数中指定的date_style为0,可以保留时区信息。

Baidu
sogou