Сократить дату до часа / минуты - PullRequest
22 голосов
/ 20 марта 2012

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

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

Ответы [ 3 ]

41 голосов
/ 20 марта 2012
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)
4 голосов
/ 20 марта 2012

Это похоже на работу:

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)
0 голосов
/ 09 сентября 2014

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

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 лет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...