Hi,
Is there a way to get the last day of a month, given a date in a datetime variable?
I have a stored procedure that accepts a datetime parameter. I need to find the last day of the month for that parameter value. For example, if the stored procedure is passed the datetime value, '6/13/2007', I need to be able to get from that '6/30/2007.'
Here's the bigger picture: The sp actually takes two datetime parameters (unfortunately, I don't have access to change the user interface). The sp needs to select records between the month/years of those dates, not including the first but including the second. For example, if the user specifies the following dates:
6/7/2006
7/15/2007
the sp needs to select all records that come after 6/30/2006 and on or before 7/31/2007.
I've tried this: ("ReportDate" is the name of the datetime field in a table in the sp and "@.StartDate" and "@.EndDate" are the datetime parameters in the sp)
Month(ReportDate) > Month(@.StartDate) And Year(ReportDate) >= Year(@.StartDate) And
Month(ReportDate) <= Month(@.EndDate) And Year(ReportDate) <= Year(@.EndDate)
But this returns fewer records than when I enter 6/30/2006 and 7/31/2007 as the parameters and just compare dates like this:
ReportDate > @.StartDate And ReportDate <= @.EndDate
Thank you.
Something like this:
Code Snippet
WHERE ( ReportDate >= dateadd( month, datediff( month, 0, @.StartDate ) + 1, 0 )
AND ReportDate < dateadd( month, datediff( month, 0, @.EndDate ) + 1, 0 )
)
You do NOT want to enclose ReportDate in a function since that will most likely result in not using indexing.
|||WHERE ( ReportDate > dateadd( month, datediff( month, 0, @.StartDate ) , -1 )
AND ReportDate < dateadd( month, datediff( month, 0, @.EndDate ) + 1,0 )
)
I just edited the previous reply to make it more close to your requirement..
I don't think that is exactly 'right'. (I did make the assumption that the OP wanted ONLY JULY 2007 dates.)
Follow this code:
Code Snippet
DECLARE
@.StartDate datetime,
@.EndDate datetime
SELECT
@.StartDate = '06/7/2007',
@.EndDate = '7/15/2007'
-- Arnie's Variation
-- Starting at midnight, 7/1/2007, Ending at midnight, 8/1/2007
SELECT
'Arnie',
dateadd( month, datediff( month, 0, @.StartDate ) + 1, 0 ),
dateadd( month, datediff( month, 0, @.EndDate ) + 1, 0 )
-- Mandip's Variation
-- Starting at midnight, 5/31/2007, ending at midnight, 8/1/2007
SELECT
'Mandip',
dateadd( month, datediff( month, 0, @.StartDate ) , -1 ),
dateadd( month, datediff( month, 0, @.EndDate ) + 1,0 )
-- OP Requested
-- the sp needs to select all records that come
-- after 6/30/2006 and on or before 7/31/2007
-- -
Arnie 2007-07-01 00:00:00.000 2007-08-01 00:00:00.000
Mandip 2007-05-31 00:00:00.000 2007-08-01 00:00:00.000
No comments:
Post a Comment