TSQL日期转换

时间:2017-10-20 13:28:23

标签: sql sql-server tsql datetime-conversion

我有一个带有datetime2对象的SQL表,它们以UTC TIME

存储

例如

UTC_TIME = 2017-10-20T13:16:14.6950000

我已使用

成功将此时间戳转换为本地时间
SELECT UTC_TIME AT TIME ZONE 'W. Europe Standard Time' AS LOCAL_TIME

以上的输出是

  

2017-10-20T13:16:14.6950000 + 02:00

这是正确的,但我想要的输出是

  

2017-10-20T15:16:14.6950000

应将偏移量添加到我的时间戳中。

有一种简单的方法吗?

示例: 在UTC时间2017-10-20T13:16:14.6950000上记录了一个事件 我在西欧,目前有2小时的抵消。因此,当地时间2017-10-20T15:16:14.6950000

我想转换UTC时间(13:16),结果是15:16

查询在以UTC时区运行的服务器上执行。

3 个答案:

答案 0 :(得分:0)

当AT TIME ZONE返回DateTimeOffset时,您可以将CONVERT与选项1一起使用。

DECLARE @UTC_TIME DATETIME2(7) = '2017-10-20T13:16:14.6950000'

SELECT CONVERT(datetime2, (@UTC_TIME AT TIME ZONE 'Pacific Standard Time'), 1) AS OrderDate_TimeZonePST  

另见CAST and CONVERT (Transact-SQL)

答案 1 :(得分:0)

您可以使用sysdatetimeoffset

执行此操作
declare @UTC_Time datetime2 = '2017-10-20T13:16:14.6950000'

Select dateadd(minute, datepart(TZoffset, sysdatetimeoffset()), @UTC_Time)

答案 2 :(得分:0)

这似乎是这样做的方法:

    DECLARE @UTC_TIME DATETIME2(7) = '2017-10-20T13:16:14.6950000'

    SELECT 
    @UTC_TIME AS T0, 
    @UTC_TIME AT TIME ZONE 'W. Europe Standard Time' AS T1,
    dateadd(minute,DATEdiff(minute,@UTC_TIME AT TIME ZONE 'W. Europe Standard Time',@UTC_TIME ),@UTC_TIME) as T2

结果是 T0:2017-10-20T13:16:14.6950000

T1:2017-10-20T13:16:14.6950000 + 02:00

T2:2017-10-20T15:16:14.6950000

T2是我们在本地时钟上看到的在UTC时间发生的事件T0