Перевод времени из UTC в локальное в SQL-запросах
Быстрый ответ
Чтобы преобразовать datetime в UTC в локальное время в SQL, применяем оператор AT TIME ZONE:
SELECT
UTC_Column AT TIME ZONE 'UTC' AT TIME ZONE 'your_time_zone' AS LocalTime
FROM
YourTable;
Меняйте your_time_zone
согласно вашему временному поясу. Первое использование AT TIME ZONE определяет, что начальное время в колонке соответствует UTC, а второе — преобразует его в выбранное вами локальное время.
Погружаемся в детали работы с часовыми поясами
Переключение между часовыми поясами в более ранних версиях SQL Server
В классической реализации SQL Server, предшествующей версии 2016, вы можете использовать сочетание функций DATEADD
и DATEDIFF
:
SELECT
DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), UTC_Column) AS LocalTime
FROM
YourTable;
Этот запрос позволяет исправить UTC колонку, вычисляя разницу в часах между UTC и локальным временем.
Учёт перехода на летнее время
Если регион предусматривает переход на летнее время (DST), требуется использование собственных функций:
SELECT
AdjustToDST(UTC_Column) AS LocalTime
FROM
YourTable;
AdjustToDST
– это ваша созданная функция, которая учитывает начало и конец периода DST.
SQL-CruiseControl_2016&AzureEdition
Упрощаем работу с SQL Server 2016 и Azure
В мире SQL Server 2016 и его более поздних версий, а также Azure, вам пригодится AT TIME ZONE
. Не забывайте также об таблице sys.time_zone_info
, содержащей перечень всех часовых поясов.
DeepCodingHeaven_CLR
Достижение новых уровней с помощью CLR
Для преобразования временных зон на самом высоком уровне используйте CLR-процедуры. Это мощный инструмент для быстрой и гибкой коррекции временных зон.
Визуализация
Представьте себя регулятором времени, когда UTC переходит в локальное время в SQL:
UTC Время: 14:00 🕑
Перелёт времени: 🛫 (UTC) -----> (Локальное время) 🛬
Локальное время: 🕔 Настройка
В SQL функции быстро меблируют календарное колесо (⚙️).
SELECT CONVERT_TZ('column_name', '+00:00', 'Your_Local_Timezone')
AS local_time FROM your_table;
Каждая строка пропускается через временной портал и выходит уже в выбранной вами временной зоне 🌍🕒.
Часовые пояса без камуфляжа
Внимание к названиям
Будьте внимательны к нюансам в названиях, особенно актуально это для datetimeoffset
, который позволяет учесть не только дату и время, но и смещение относительно UTC.
Смена времён года
Не забывайте о различиях во времени в течение года – при переходе на DST и обратно. Не беспокойтесь! С помощью DATEPART
и TZOFFSET
определить актуальное смещение не составит труда:
SELECT
DATEADD(MINUTE, DATEPART(TZOFFSET, SYSDATETIMEOFFSET()), UTC_Column) AS LocalTime
FROM
YourTable;
Полезные материалы
- AT TIME ZONE (Transact-SQL) – SQL Server | Microsoft Learn — официальная документация Microsoft о
AT TIME ZONE
в SQL Server. - MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions — руководство по функции
CONVERT_TZ()
в MySQL. - PostgreSQL Documentation: 8.5. Date/Time Types — описание типов даты и времени в PostgreSQL.
- Date And Time Functions — возможности работы с датой и временем в SQLite.
- Date – JavaScript | MDN — управление датой и временем в JavaScript.