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