Преобразование UTC в местное время в T-SQL: подробное руководство

При работе с информацией о времени и дате в T-SQL часто возникают ситуации, когда необходимо преобразовать UTC (всеобщее координированное время) в местный часовой пояс. В этой статье блога мы рассмотрим различные методы выполнения этой задачи, а также примеры кода. Независимо от того, являетесь ли вы новичком или опытным разработчиком SQL, это подробное руководство предоставит вам несколько вариантов преобразования UTC в местное время в T-SQL.

Метод 1: использование функций GETUTCDATE() и GETDATE()
Один из самых простых способов преобразования UTC в местное время — использование функций GETUTCDATE() и GETDATE() в T-SQL. Функция GETUTCDATE() извлекает текущую дату и время в формате UTC, а функция GETDATE() — текущую локальную дату и время. Вычислив разницу во времени между этими двумя значениями, вы можете преобразовать UTC в местное время. Вот пример:

DECLARE @utcDateTime DATETIME;
DECLARE @localDateTime DATETIME;
SET @utcDateTime = GETUTCDATE();
SET @localDateTime = GETDATE();
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, @utcDateTime, @localDateTime), @utcDateTime) AS LocalTime;

Метод 2: использование функции SWITCHOFFSET()
Если вы работаете с SQL Server 2016 или более поздними версиями, вы можете использовать функцию SWITCHOFFSET() для преобразования UTC в местное время. Эта функция корректирует смещение часового пояса значения datetimeoffset без изменения даты и времени. Вот пример:

DECLARE @utcDateTime DATETIMEOFFSET;
DECLARE @localDateTime DATETIMEOFFSET;
SET @utcDateTime = SYSUTCDATETIME();
SET @localDateTime = SWITCHOFFSET(@utcDateTime, DATEPART(TZOFFSET, SYSDATETIMEOFFSET()));
SELECT @localDateTime AS LocalTime;

Метод 3: использование предложения AT TIME ZONE
Начиная с SQL Server 2016 было введено предложение AT TIME ZONE, позволяющее легко конвертировать время в формате UTC в местное время, указав желаемый часовой пояс. Вот пример:

DECLARE @utcDateTime DATETIME;
DECLARE @localDateTime DATETIME;
SET @utcDateTime = GETUTCDATE();
SET @localDateTime = @utcDateTime AT TIME ZONE 'Central Standard Time';
SELECT @localDateTime AS LocalTime;

В этой статье мы рассмотрели несколько методов преобразования UTC в местное время в T-SQL. Мы рассмотрели методы использования функций GETUTCDATE() и GETDATE(), функции SWITCHOFFSET() и предложения AT TIME ZONE. В зависимости от версии и требований вашего SQL Server вы можете выбрать наиболее подходящий метод для вашего сценария. Используя эти методы, вы можете точно преобразовать время UTC в местное время в запросах T-SQL или хранимых процедурах.

Помните, что обработка преобразований часовых поясов имеет решающее значение, особенно при работе с международными приложениями или системами, распределенными в разных регионах. Благодаря приведенным примерам у вас теперь есть прочная основа для эффективного преобразования UTC в местное время в T-SQL.