2017-01-25 2 views
1

Je veux lancer une requête simple T-SQL SELECT telle que cette entrée (datetimeoffset) ...t-sql converti datetimeoffset avec + 01 utc: 00 à datetime amsterdam locale

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

OU

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

... sort que cette sortie (datetime):

2015-01-01 01:15:00

OU

2015-05-04 16:15:00

entrée est une colonne et une sortie doit également être une colonne.

Des idées?

MISE À JOUR 20170126

Ok, comme toujours, il est jamais aussi facile que je pense. La requête fait partie d'une requête plus importante, que j'ai maintenant formulée comme suit (voir ci-dessous), la colonne d'entrée étant nommée 'TimeStamp' et la colonne de sortie étant nommée 'Tijd'. Cela ne fonctionne pas car il ne semble pas reconnaître [TimeStamp] dans la déclaration de la variable. Qu'est-ce que je rate?

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] 

Répondre

2

Je pense que vous avez votre logique de décalage de temps dans le mauvais sens de votre question concernant vos +/- valeurs, mais vous avez un couple d'options en fonction du type de données que vous souhaitez en sortie:

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 

Sortie:

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