Du kan göra detta på följande sätt på SQL Server 2008 eller senare:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
Du kan också göra det mindre utförliga:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
Vad du än gör, gör inte använd -
att subtrahera datum, eftersom operationen inte är atomär, och du kommer ibland att få obestämda resultat på grund av att tävlingsförhållanden mellan systemets datumtid och lokal datumtid kontrolleras vid olika tidpunkter (d.v.s. icke-atomärt).
Observera att detta svar inte tar hänsyn till sommartid. Om du vill inkludera en sommarjustering, se även följande SO-fråga:
Hur man skapar sommartid start- och slutfunktion i SQL Server