Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Округление datetime до минуты и часа в T-SQL: примеры функций

Быстрый ответ

Если вам нужно округлить значения datetime до ближайшей минуты, воспользуйтесь следующим выражением:

SQL
Скопировать код
SELECT DATEADD(MINUTE, ROUND(DATEDIFF(SECOND, '20000101', GETDATE()) / 60.0, 0), '20000101')

А для округления до ближайшего часа подходит такой код:

SQL
Скопировать код
SELECT DATEADD(HOUR, ROUND(DATEDIFF(SECOND, '20000101', GETDATE()) / 3600.0, 0), '20000101')

В обоих случаях замените GETDATE() на конкретное значение datetime, которое вы хотите округлить. '20000101' является фиксированной точкой отсчета времени, нужной для корректного округления.

Кинга Идем в IT: пошаговый план для смены профессии

Что за функции?

Основыми инструментами в нашем случае являются функции DATEADD и DATEDIFF, использующиеся с '20000101' в качестве стартовой точки времени. Это обеспечивает точное округление времени.

Ради более точного округления времени до минуты или часа, добавляется или вычитается полминуты (30 секунд) или полчаса (1800 секунд) соответственно. Вследствие этого, функция ROUND округлит результат до ближайшего значения.

Визуализация

Попробуем визуализировать время как мишень для стрелкового выстрела, где цель – попасть как можно ближе к центру:

Markdown
Скопировать код
Центр мишени: 🎯     |    🕒 Момент выстрела: 10:29:58

Если округляем до минуты, получаем следующее: 🎯🕑

Markdown
Скопировать код
| Действие          | Время  |
| ----------------- | ------ |
| Изначальное время | 🎯🕒➡️🕒 10:29 |
| Округление        | 🎯🕒➡️🕒 10:30 |

Если же округляем до часа, выходит так: 🎯⏰

Markdown
Скопировать код
| Действие          | Время  |
| ----------------- | ------ |
| Изначальное время | 🎯🕒➡️⏰ 10:00 |
| Округление        | 🎯🕒➡️⏰ 11:00 |

Цель нашего округления – не просто достичь ближайшей минуты или часа, но и приблизиться к центру мишени.

Погружение в детали

Использование CAST и CONVERT

Округление времени до минуты также возможно с помощью функций CAST и CONVERT:

Вот пример округления до минуты:

SQL
Скопировать код
SELECT CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE(), 120))

Для вывода в формате ЧЧ:ММ:

SQL
Скопировать код
SELECT CONVERT(CHAR(5), GETDATE(), 108)

В обоих сценариях секунды будут игнорироваться и мы получим только часы и минуты.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Функции Azure: DATETRUNC и DATE_BUCKET

В SQL Server 2022/Azure можно использовать функции DATETRUNC и DATE_BUCKET для упрощения округления:

Округление до ближайшей минуты с DATETRUNC:

SQL
Скопировать код
SELECT DATETRUNC('minute', GETDATE())

А для достижения ближайшей минуты с DATE_BUCKET:

SQL
Скопировать код
SELECT DATE_BUCKET(1, MINUTE, GETDATE())

Работа со специфичными данными

Если есть необходимость в работе с переменными данными, округление можно оформить в виде пользовательских функций или хранимых процедур. Это поможет облегчить поддержку и повторное использование кода.

Препятствия на пути

Учёт часовых поясов

При округлении, важно не забывать учитывать часовые пояса, чтобы избежать ошибок округления.

Точность округления

Функция ROUND может дать некорректный результат при работе с большими временными интервалами, когда незначительные расхождения могут быть неправильно округлены.

Совместимость версий SQL Server

При работе с разными версиями SQL Server следует учитывать их совместимость. Некоторые функции могут отсутствовать или работать по-разному в различных версиях серверов.

Полезные материалы

Эти ресурсы помогут вам лучше разобраться в теме работы с датой и временем в SQL:

  1. ROUND (Transact-SQL) — SQL Server. Описание функции ROUND.
  2. DATEPART (Transact-SQL) — SQL Server. Обзор функции DATEPART.
  3. DATEDIFF (Transact-SQL) — SQL Server. Подробная информация по функции DATEDIFF и временным интервалам.
  4. FORMAT (Transact-SQL) — SQL Server. Руководство по форматированию даты с помощью FORMAT.
  5. CAST and CONVERT (Transact-SQL) — SQL Server. Руководство по преобразованию типов данных через функции CAST и CONVERT.
  6. CEILING (Transact-SQL) — SQL Server. Обзор функций округления CEILING и FLOOR.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как округлить значение datetime до ближайшей минуты в T-SQL?
1 / 5