Округление даты и времени в SQL Server


4 0

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

Если нужно просто обрубить дату, то можно поступить так:

select dateadd(day, datediff(day, 0, GetDate()), 0)

Где-то я видел пример, в котором автор зачем-то прибавлял и отнимал дату '20000101':

select dateadd(day, datediff(day, '20000101', GetDate()), '20000101')

Результат идентичный предыдущему, а смысла в действии я не понял

Есть еще вариант с использованием конвертации:

select CONVERT(varchar(8), GetDate(), 112)

Функцию CONVERT также удобно использовать, если нужно вырезать время из типа данных DateTime сервера MS SQL:

select CONVERT(varchar(10), GetDate(), 108)

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

select CONVERT(varchar(5), GetDate(), 108)

Кстати, однажды мне пришлось группировать данные по времени. Нужно было узнать, в какое время чаще входили пользователи. Просто нужно округлить дату до часа и проблема решена:

select CONVERT(varchar(8), Logindate, 112) + ' ' + 
       CONVERT(varchar(2), Logindate, 108), 
    count(*)
from MemberLogin ml
group by CONVERT(varchar(8), Logindate, 112) + ' ' + 
          CONVERT(varchar(2), Logindate, 108)

Не знаю, является ли этот метод округления даты и времени в SQL идеальным, но работает вполне быстро. Может кто подскажет вариант лучше на будущее, но меня в принципе и такое округение дат устраивает.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

oleg

25 Ноября 2010

Английский мне понятен, но SQL нет (хотя на первом курсе в универе проходили в образовательных целях недельку другую), просто опытный пользователь ПК. Смотрю виджеты поставили, "мне нравится", "поделиться" etc, хотя я крот, может просто раньше не видел.

Кстати, немного офтоп, интересная новость, - "В войне Microsoft и Linux страдают школы".


oleg

25 Ноября 2010

Похоже я хомячком стал или любителем блога :)


daneska

17 Мая 2013

Самый последний вариант - это не округление, а усечение. Дата со временем 10:58, "округлённая" таким образом вернёт значение даты и 10 часов, а не 11.


korol

26 Июля 2022

в запросе
select dateadd(day, datediff(day, '20000101', GetDate()), '20000101')
параметр  '20000101' нужен для защиты от ошиби переполнения при окруклении до секунд.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне