Форматирование даты и времени в TSQL: формат ISO 8601
Быстрый ответ
Если вам необходимо преобразовать DATETIME
в формат ISO 8601 в T-SQL, воспользуйтесь следующим выражением:
SELECT FORMAT(GETDATE(), 'yyyy-MM-ddTHH:mm:ss') AS ISO8601;
Этот запрос вернет текущее время в формате "2023-03-16T14:28:23"
, полностью согласно стандарту ISO 8601.
Визуализация
Для более наглядного представления процесса преобразования используем эмодзи:
📅 ➡️ 🔄 ➡️ 📆
- 📅: исходное значение
DATETIME
. - 🔄: функция
CONVERT
, выполняющая изменение формата. - 📆: результат в формате ISO 8601, готовый к использованию.
Необходимость применения 'CONVERT'
В SQL Server формат ISO 8601 чаще всего используется для представления дат и времени, иногда с указанием временной зоны:
- Стандартный формат:
YYYYMMDDTHHMMSS
илиYYYYMMDDTHHMMSSZ
- Расширенный формат:
YYYY-MM-DDTHH:MM:SS
илиYYYY-MM-DDTHH:MM:SSZ
— этот формат удобнее для отображения.
Функция CONVERT
— важный инструмент для любого разработчика. Чаще всего она используется со стилями 126 (без указания временной зоны) или 127 (с указанием временной зоны):
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126) AS ISO8601;
-- Преобразует в расширенный формат ISO 8601
SELECT CONVERT(NVARCHAR(30), GETDATE(), 127) AS ISO8601;
-- Возвращает результат со значением временной зоны "Zulu" (UTC+0)
Фокус на производительности
При обработке больших объемов данных важно обеспечить производительность. Хоть и функция FORMAT
кажется удобной, её использование возможно только в T-SQL, начиная с версии 2012.
Для поддержания эффективности работы рекомендуется использовать функцию CONVERT
со стилями 126 и 127:
SELECT CONVERT(VARCHAR, GETDATE(), 127) as ISO8601;
-- Это эффективное и элегантное решение
Правильное хранение даты и времени
Рекомендуется хранить даты в типах данных SQL Server DATETIME
, применяя форматирование только для отображения данных:
SELECT CONVERT(VARCHAR, your_datetime, 126) AS TimeOnly;
Хранение уже отформатированных дат не желательно, так как это снижает производительность запросов, усложняет индексацию и вычисления.
'YMD' — универсальный формат в T-SQL
При вставке дат рекомендуется использовать формат YMD
, или YYYY-MM-DD
, обеспечивающий безпроблемное принятие данных:
INSERT INTO your_table (date_column) VALUES ('20230316');
Учет временных зон
Для избежания путаницы с временными зонами воспользуйтесь функцией DATETIMEOFFSET
, которая позволяет явным образом задавать смещение временной зоны:
SELECT CONVERT(VARCHAR, your_datetimeoffset, 127) AS ISO8601;
Полезные материалы
- FORMAT (Transact-SQL) — SQL Server | Microsoft Learn — документация по использованию форматирования дат в ISO 8601.
- What is the "right" JSON date format? — Stack Overflow — что такое корректный формат даты в JSON.
- ISO 8601 — Википедия — подробности о стандарте ISO 8601.
- SQL Server CONVERT() Function — как испольщовать функцию CONVERT в SQL Server.
- Best approach to remove time part of datetime in SQL Server — Stack Overflow — рекомендации по работе со значениями datetime в SQL Server.