Get a Table of Months Between Two Dates

Sometimes you need a list of months between two dates. Admittedly, this is another case where a calendar table would come in VERY handy. Unfortunately, I have not been able to build one yet.

In case you’re in a similar situation, here’s how you could go about doing this:

CREATE FUNCTION dbo.GetMonthList (
  @StartDate DATETIME,
  @EndDate   DATETIME
)
RETURNS @months TABLE (
  [month] DATETIME
)
WITH EXECUTE AS OWNER AS
BEGIN
/******************************************************************************
 * Author:      Jeremiah Peschka
 * Create Date: 2008-11-20
 * Description: Create a table of dates between @StartDate and @EndDate
 *****************************************************************************/
  DECLARE @MonthDiff         INT;
  DECLARE @counter           INT;
  DECLARE @tbl               TABLE ([month] DATETIME);

  SET @StartDate = '2008-01-01';
  SET @EndDate   = '2008-12-01';

  SET @counter      = 0;

  SELECT @MonthDiff = DATEDIFF(mm, @StartDate, @EndDate);

  WHILE @counter <= @MonthDiff
  BEGIN
      INSERT @months
      SELECT (DATEADD(mm, @counter, @StartDate));

    SET @counter = @counter + 1;
  END

  RETURN;
END
GO

Comments

7 Comments so far. Leave a comment below.
  1. Amit,

    Excellent Article.
    I am not an expert in SQL and your function has proved very nice for me.
    One more task I need to perform. In my table I have a effective_date column for a employee.
    When any change is made for the employee the effective_date is changed.Now what I need to do is find the months between these two dates. Initially I don’t know the second date.
    I think you can help me in this regard.Your help is very much appreciated.Thanks.

  2. Deepika,

    Great function! Really helpful. Thanks a lot Jeremiah.

  3. Suresh,

    This is really a gr8 help.
    Thanks a ton

  4. SJQ,

    Hi, I tried this, but it doesn’t seem to work when I query another table. I wanted to use this function to query between two dates i.e.Project Start Date AND Project Finish Date. These two columns already exist in the table, but when I use the UDF above it throws an exception that ‘dbo.GetMonthList’ cannot be found

Add Your Comments

Disclaimer
Your email is never published nor shared.
Required
Required
Tips

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <ol> <ul> <li> <strong> <p>

Ready?

This site is protected with Urban Giraffe's plugin 'HTML Purified' and Edward Z. Yang's Powered by HTML Purifier. 401 items have been purified.