Obecnie używam wariantu dateadd / datediff z datą zero (0). Przesyłanie nie jest wymagane:
select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0)
GETDATE() jest dowolną datą i godziną.
Będzie to działać dla dat co najmniej do roku 5500 przed niepowodzeniem datediff z powodu przepełnienia. Jeśli jednak spróbujesz użyć drugiej celności, powyższe zadanie od razu się nie powiedzie.
Użycie innej ustalonej daty, takiej jak „2009-01-01” lub Dzisiejsza data (ostrzeżenie, bardziej brzydki SQL), naprawi to. Przyszła data również będzie działać. Dopóki ma część czasu 00:00:00, możesz na niej oprzeć inną datę i godzinę.
na przykład:zaokrąglij do najbliższych 30 sekund:
select dateadd(second, round(datediff(second, '2010-01-01', GETDATE()) / 30.0, 0) * 30, '2010-01-01');