• I frequently use SELECT CAST(FLOOR(CAST(<yourDateHere> AS FLOAT)) AS DATETIME)

    Interestingly, rounding happens near midnight. The following returns '2010-04-08 00:00:00.000':

    DECLARE @Date DATETIME = '2010-04-07 23:59:59.999'

    SELECT CAST(FLOOR(CAST(@Date AS FLOAT)) AS DATETIME)

    Not sure if this timestamp would actually happen...