如果您使用的是受支持的 SQL Server 版本,这实际上非常简单。如果我们假设表中的值为2020-06-10T13:11:00,则只需要CONVERT 和SWITCHOFFSET:
SELECT V.Dt,
SWITCHOFFSET(CONVERT(datetimeoffset(0),V.dt),'-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T13:11:00')))V(Dt);
如果它实际上是 UTC 时间,并且您需要将其更改为(我假设)Central,那么它将是:
SELECT V.Dt,
CONVERT(datetimeoffset(0),V.dt) AT TIME ZONE 'Central Standard Time'
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T18:11:00')))V(Dt);
相反,您将不得不做一些varchar 操作,因为您使用的是完全不受支持的 SQL Server 版本:
--If switching the offset
SELECT V.Dt,
CONVERT(datetimeoffset(0),CONVERT(varchar(20),V.Dt,126) + '-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T13:11:00')))V(Dt);
--If changing the offset
SELECT V.Dt,
CONVERT(datetimeoffset(0),CONVERT(varchar(20),DATEADD(HOUR, -5,V.Dt),126) + '-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T18:11:00')))V(Dt);
请注意,这两个都与 DST 无关,因为它是 SWITCHOFFSET。只有AT TIME ZONE 会考虑夏令时。