• This is not the best way to implement this -- See http://stackoverflow.com/questions/85373/floor-a-date-in-sql-server

    declare @datetime datetime;

    set @datetime = getdate();

    select @datetime;

    select dateadd(year,datediff(year,0,@datetime),0);

    select dateadd(month,datediff(month,0,@datetime),0);

    select dateadd(day,datediff(day,0,@datetime),0);

    select dateadd(hour,datediff(hour,0,@datetime),0);

    select dateadd(minute,datediff(minute,0,@datetime),0);

    select dateadd(second,datediff(second,'2000-01-01',@datetime),'2000-01-01');

    or converted to this function:

    create function dbo.DATEFLOOR (

    @seed datetime

    , @part varchar(2)

    )

    returns datetime

    as

    begin

    /*

    Sample Usage (uses standard dateparts):

    select 'second', dbo.datefloor(getdate(),'ss') union all

    select 'minute', dbo.datefloor(getdate(),'mi') union all

    select 'hour' , dbo.datefloor(getdate(),'hh') union all

    select 'day' , dbo.datefloor(getdate(),'dd') union all

    select 'month' , dbo.datefloor(getdate(),'mm') union all

    select 'year' , dbo.datefloor(getdate(),'yy')

    */

    select @retDate = case

    when @part = 'ss' then dateadd(second,datediff(second,'2000-01-01',@seed),'2000-01-01')

    when @part = 'mi' then dateadd(minute,datediff(minute,0,@seed),0)

    when @part = 'hh' then dateadd(hour,datediff(hour,0,@seed),0)

    when @part = 'dd' then dateadd(day,datediff(day,0,@seed),0)

    when @part = 'mm' then dateadd(month,datediff(month,0,@seed),0)

    when @part = 'yy' then dateadd(year,datediff(year,0,@seed),0)

    end

    return @retDate

    end