Вот самая простая вещь, которую я нашел
-- Midnight floor of current date
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))
DATEDIFF возвращает целое число дней до или после 1900-1-1,
и преобразование даты и времени обязательно вернет его к этой дате в полночь.
Поскольку DateDiff возвращает целое число, вы можете использовать сложение или вычитание дней, чтобы получить правильное смещение.
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()) + @dayOffset)
Это не округление, это усечение ... Но я думаю, что об этом спрашивают.
(Для округления добавьте один и обрежьте ... и это тоже не округление, что потолок, но
опять скорее всего, что вы хотите. Чтобы действительно округлить, добавьте .5 (это работает?) И обрежьте.
Оказывается, вы можете добавить .5 к GetDate (), и все работает как положено.
-- Round Current time to midnight today or midnight tomorrow
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE() + .5))
Я провел все свои испытания на SQL Server 2008, но я думаю, что эти функции применимы и к 2005 году.