This one will return the first day of a week based upon the date you pass in.
-------------------------------------------------
-- Does the function already exist?
-- if so... drop it.
-------------------------------------------------
IF OBJECT_ID(N'dbo.xGetFirstDayOfWeek',N'FN') IS NOT NULL
BEGIN
print 'Function found... Dropping'
DROP FUNCTION dbo.xGetFirstDayOfWeek
END
GO
CREATE FUNCTION dbo.xGetFirstDayOfWeek(@Date DateTime)
RETURNS DateTime
AS
-------------------------------------------------
--Function will return the first day of the
--week based upon the date passed in.
--
--You pass in a Date and it return
--the Date for first day of the week
-------------------------------------------------
BEGIN
DECLARE @DayOfWeek INT
DECLARE @DaysToSubtract INT
-- Get the day of the week
-- i.e. if today is Thursday and the week starts on Sunday
-- then the day of the week is 5
SET @DayOfWeek = DatePart( dw, @Date )
-- We need to subtract one from the @DayOfWeek.
-- The reason is that if today is the 5th day and we want
-- to get back to the 1st day, we only need to subtract 4
-- from the Date. Otherwise we would end up at 0.
SET @DaysToSubtract = @DayOfWeek -1
-- Now we subtract @DaysToSubtract from the @date passed in.
-- This will return the first day of the week for the given @date.
RETURN DATEADD( d, -@DaysToSubtract, @Date )
-- Instead of the previous five lines of code we could
-- have also used this single line. I broke it out above to
-- hopefully better explain what was happening.
-- RETURN DATEADD(d,-(DATEPART(dw, @Date) - 1),@Date)
END
GO
--Now we will check to see if the code works
-------------------------------------------------
-- Should return 11/27/2011
Select dbo.xGetFirstDayOfWeek('2011-12-01')
-- Should return 12/25/2011 --already the first day of the week
Select dbo.xGetFirstDayOfWeek('2011-12-25')
Select dbo.xGetFirstDayOfWeek('2011-12-25')
No comments:
Post a Comment