Сократите дату до часа/минуты

Как убрать дату в sql server 2008 следующим образом:

У меня есть 2012-01-02 12:04:11.443, и я хочу только выбрать 2012-01-02 12:00:00.000 и 2012-01-02 12:04:00.000 (часовой и минутный уровень)

Ответы

Ответ 1

declare @D as datetime = '2012-01-02T12:04:11.443'

select dateadd(hour, datediff(hour, 0, @D), 0)
select dateadd(minute, datediff(minute, 0, @D), 0)

Ответ 2

Это работает:

select [Rounded Time] =
    dateadd(mi,datediff(mi,0,dateadd(ss,30,a.DT)),0)

from
    (
    select dt = convert(datetime,'8:24:29.997')
    union all
    select dt = convert(datetime,'8:24:30.000')
    ) a

Результаты:

Rounded Time                                           
------------------------------------------------------ 
1900-01-01 08:24:00.000
1900-01-01 08:25:00.000

(2 row(s) affected)

Ответ 3

Я использую что-то вроде этого:

DATEADD(hour,DATEDIFF(hour,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00')

Вы можете использовать эту формулу для усечения на другие уровни, т.е. минуты:

DATEADD(minutes,DATEDIFF(minutes,'2000-01-01 00:00',[timestamp]),'2000-01-01 00:00')

Вы должны помнить, что если вы усекаете до уровня секунд, максимальная разница между базовой датой и [меткой времени] составляет 68 лет.