Ответ 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)
Как убрать дату в sql server 2008 следующим образом:
У меня есть 2012-01-02 12:04:11.443
, и я хочу только выбрать 2012-01-02 12:00:00.000
и 2012-01-02 12:04:00.000
(часовой и минутный уровень)
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)
Это работает:
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)
Я использую что-то вроде этого:
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 лет.