Поступил инетерсный вопрос - как округлить дату или время с помощью 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 идеальным, но работает вполне быстро. Может кто подскажет вариант лучше на будущее, но меня в принципе и такое округение дат устраивает.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Английский мне понятен, но SQL нет (хотя на первом курсе в универе проходили в образовательных целях недельку другую), просто опытный пользователь ПК. Смотрю виджеты поставили, "мне нравится", "поделиться" etc, хотя я крот, может просто раньше не видел.
Кстати, немного офтоп, интересная новость, - "В войне Microsoft и Linux страдают школы".
Похоже я хомячком стал или любителем блога :)
Самый последний вариант - это не округление, а усечение. Дата со временем 10:58, "округлённая" таким образом вернёт значение даты и 10 часов, а не 11.
в запросе
select dateadd(day, datediff(day, '20000101', GetDate()), '20000101')
параметр '20000101' нужен для защиты от ошиби переполнения при окруклении до секунд.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.