TSQL日期转换
我有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时区运行的服务器。
截至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
这不起作用:: 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
你可以做到这一点使用sysdatetimeoffset
declare @UTC_Time datetime2 = '2017-10-20T13:16:14.6950000'
Select dateadd(minute, datepart(TZoffset, sysdatetimeoffset()), @UTC_Time)
这也不起作用,因为SQL服务器在UTC时区中正在云中运行... – Kermit754
这似乎的方式要做到这一点:
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
的可能重复[我怎样才能转换为SQL Server 2008中的DateTimeOffset为DateTime(HTTPS发生:// stackoverflow.com/questions/4953903/how-can-i-convert-a-sql-server-2008-datetimeoffset-to-a-datetime) – Igor