Если вы работали с поддерживаемой версией 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);
Если это на самом деле время UT C, и вам нужно изменить его на (я полагаю) 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
манипуляции, поскольку вы используете версию of SQL Сервер, который полностью не поддерживается:
--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 c, так как это SWITCHOFFSET
. Только AT TIME ZONE
учитывает летнее время.