2017-01-25 16 views
1
Амстердама

Я хочу запустить простой запрос T-SQL SELECT таким образом, что этот вход (DateTimeOffset) ...T-SQL новообращенного DateTimeOffset с UTC + 01: 00 до местного DateTime

2015-01-01 00: 15: 00,0000000 +01: 00

ИЛИ

2015-05-04 14: 15: 00,0000000 +02: 00

... выходит как этот выход (DateTime):

2015-01-01 01:15:00

ИЛИ

2015-05-04 16:15:00

Входной один столбец и выход также должен быть один столбец.

Любые идеи?

UPDATE 20170126

Ok как всегда никогда не бывает так просто, как мне кажется. Запрос является частью более крупного запроса, который я сформулировал следующим образом (см. Ниже), в столбце ввода с именем «TimeStamp», а выходной столбец - «Tijd». Это не работает, хотя, как представляется, он не распознает [TimeStamp] в объявлении переменной. Что мне не хватает?

DECLARE @dt datetimeoffset = (SELECT CONVERT(datetimeoffset, [TimeStamp])) 
SELECT @dt as Original 
     ,CONVERT(datetime2,@dt,1) AS Tijd 
     ,[Id] 
     ,[EanCode] 
     ,[DataAccessPointId] 
     ,[DataSource] 
     ,[ElectricityUsageNormalkWh] AS Piek 
     ,[ElectricityUsageLowkWh] AS Dal 
     ,[DateAltKey] = CONVERT(int, CONVERT(varchar(8), [TimeStamp], 112)) 
     ,[TimeAltKey] = DATEPART(hh,[TimeStamp]) * 10000 + DATEPART(mi,[TimeStamp]) * 100 + DATEPART(ss,[TimeStamp]) 
    FROM [dbo].[ElectricityTelemetryData] 

ответ

2

Я думаю, что вы ваше время смещения логику неправильного пути вокруг в вопросе о ваших +/- значениях, но у вас есть пара вариантов в зависимости от типа данных вы хотите в качестве вывода:

declare @dt datetimeoffset = (select convert(datetimeoffset,'2015-01-01 00:15:00.0000000 +01:00')) 

select @dt as Original 
     ,convert(datetime2,@dt,1) as Converted 
     ,switchoffset(@dt,'+00:00') as Switched 

Выход:

Original       | Converted      | Switched 
2015-01-01 00:15:00.0000000 +01:00 | 2014-12-31 23:15:00.0000000 | 2014-12-31 23:15:00.0000000 +00:00