Bạn có thể thực hiện việc này như sau trên SQL Server 2008 trở lên:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
Bạn cũng có thể làm ít dài dòng hơn:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
Dù bạn làm gì, không sử dụng -
trừ ngày tháng, vì thao tác này không phải là nguyên tử và đôi khi bạn sẽ nhận được kết quả không xác định do điều kiện chủng tộc giữa ngày giờ hệ thống và ngày giờ cục bộ được kiểm tra tại các thời điểm khác nhau (tức là không phải nguyên tử).
Xin lưu ý rằng câu trả lời này không tính đến DST. Nếu bạn muốn bao gồm điều chỉnh DST, vui lòng xem thêm câu hỏi SO sau:
Cách tạo chức năng Bắt đầu và Kết thúc Tiết kiệm ánh sáng ban ngày trong SQL Server