t-sql 将 utc+01:00 的 datetimeoffset 转换为本地阿姆斯特丹日期时间

R. *_*ven 2 t-sql datetime datetimeoffset

我想运行一个简单的 T-SQL SELECT 查询,以便此输入 (datetimeoffset)...

2015-01-01 00:15:00.0000000 +01:00

或者

2015-05-04 14:15:00.0000000 +02:00

...输出如下(日期时间):

2015-01-01 01:15:00

或者

2015-05-04 16:15:00

输入是一列,输出也应该是一列。

有任何想法吗?

更新20170126

好吧,一如既往,它从来没有我想象的那么容易。该查询是一个更大查询的一部分,我现在将其制定如下(见下文),输入列名为“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]
Run Code Online (Sandbox Code Playgroud)

iam*_*ave 6

我认为在关于 +/- 值的问题中,您的时间偏移逻辑是错误的,但是根据您想要作为输出的数据类型,您有几个选项:

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
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)