Voici la solution la plus simple que j'ai trouvée.
-- Midnight floor of current date
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))
Le DATEDIFF renvoie le nombre entier de jours avant ou depuis 1900-1-1, et la fonction Convert Datetime la ramène obligeamment à cette date à minuit.
Comme DateDiff renvoie un nombre entier, vous pouvez ajouter ou soustraire des jours pour obtenir le bon décalage.
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()) + @dayOffset)
Ce n'est pas un arrondi, c'est une troncature... Mais je pense que c'est ce qui est demandé. (Pour arrondir, ajouter un et tronquer...et ce n'est pas un arrondi non plus, c'est le plafond, mais Encore une fois, c'est probablement ce que vous voulez. Pour vraiment arrondir, ajoutez .5 (est-ce que ça marche ?) et tronquez.
Il s'avère que vous pouvez ajouter .5 à GetDate() et cela fonctionne comme prévu.
-- Round Current time to midnight today or midnight tomorrow
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE() + .5))
J'ai fait tous mes essais sur SQL Server 2008, mais je pense que ces fonctions s'appliquent également à 2005.