В момента използвам вариант dateadd / datediff с нулева (0) дата за това. Не се изисква кастинг:
select dateadd(minute, datediff(minute,0,GETDATE()) / 15 * 15, 0)
GETDATE() е каквато и да е вашата дата и час.
Това ще работи за дати най-малко до 5500 година, преди датата да се провали поради препълване. Въпреки това, ако се опитате да използвате втора точност, по-горе ще се провали веднага.
Използването на друга фиксирана дата, като '2009-01-01', или днешна дата (предупреждение, по-грозен SQL) ще коригира това. Бъдеща дата също ще работи. Стига да има времева част от 00:00:00, можете да базирате друга дата и час на него.
например:закръглете до най-близките 30 секунди:
select dateadd(second, round(datediff(second, '2010-01-01', GETDATE()) / 30.0, 0) * 30, '2010-01-01');