Vous pouvez le faire comme suit sur SQL Server 2008 ou supérieur :
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
Vous pouvez également faire le moins verbeux :
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
Quoi que vous fassiez, ne le faites pas utilisez -
pour soustraire des dates, car l'opération n'est pas atomique, et vous obtiendrez parfois des résultats indéterminés en raison de conditions de concurrence entre la date et l'heure du système et la date et l'heure locales vérifiées à des moments différents (c'est-à-dire de manière non atomique).
Veuillez noter que cette réponse ne tient pas compte de l'heure d'été. Si vous souhaitez inclure un ajustement DST, veuillez également consulter la question SO suivante :
Comment créer la fonction de début et de fin de l'heure d'été dans SQL Server