2017-10-20 102 views
2

我有DATETIME2对象SQL表,他们使用存储在UTC时间TSQL日期转换

例如

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时区运行的服务器。

+0

的可能重复[我怎样才能转换为SQL Server 2008中的DateTimeOffset为DateTime(HTTPS发生:// stackoverflow.com/questions/4953903/how-can-i-convert-a-sql-server-2008-datetimeoffset-to-a-datetime) – Igor

回答

0

截至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)

+0

这不起作用:: DECLARE UTC_TIME DATETIME2(7)= '2017-10-20T13:16:14.6950000' 选择 UTC_TIME AS T0, UTC_TIME AT TIME ZONE“W.欧洲标准时间'AS T1, CONVERT(datetime2,(UTC_TIME at TIME ZONE'W. Europe Standard Time'),1)AS T2 answer我回来的是 T0:2017-10-20T13:16:14.6950000, T1:2017-10-20T13:16:14.6950000 + 02:00, T2:2017-10-20T11:16:14.6950000, 但预计值为2017-10-20T15:16:14.6950000(如我所愿在本地时钟上读取) – Kermit754

0

你可以做到这一点使用sysdatetimeoffset

declare @UTC_Time datetime2 = '2017-10-20T13:16:14.6950000' 

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

这也不起作用,因为SQL服务器在UTC时区中正在云中运行... – Kermit754

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