Kluczem jest użycie DATEADD i DATEDIFF wraz z odpowiednim wyliczeniem zakresu czasu SQL.
declare @datetime datetime;
set @datetime = getdate();
select @datetime;
select dateadd(year,datediff(year,0,@datetime),0);
select dateadd(month,datediff(month,0,@datetime),0);
select dateadd(day,datediff(day,0,@datetime),0);
select dateadd(hour,datediff(hour,0,@datetime),0);
select dateadd(minute,datediff(minute,0,@datetime),0);
select dateadd(second,datediff(second,'2000-01-01',@datetime),'2000-01-01');
select dateadd(week,datediff(week,0,@datetime),-1); --Beginning of week is Sunday
select dateadd(week,datediff(week,0,@datetime),0); --Beginning of week is Monday
Zwróć uwagę, że gdy ustawiasz piętro co sekundę, często otrzymasz przepełnienie arytmetyczne, jeśli użyjesz 0. Wybierz więc znaną wartość, która na pewno będzie niższa niż data i godzina, w której próbujesz wyrównać.