title: SQL Server : birthdays on Leap Year
body: <p>I have a table with employee birthdays. I'm trying to create a stored procedure that returns everyone's birthdays within 2 given dates. We have employees born on a leap year.</p>
  
  <p>I can successfully get return a person when their birthday falls on a leap year following the example at <a href="http://www.berezniker.com/content/pages/sql/microsoft-sql-server/birthday-query-ms-sql-server" rel="nofollow">http://www.berezniker.com/content/pages/sql/microsoft-sql-server/birthday-query-ms-sql-server</a></p>
  
  <pre><code>DECLARE @StartDate DATETIME, @EndDate DATETIME
  
  SET @StartDate = '2009-02-22'
  SET @EndDate   = '2009-02-28'
  
  --SET @StartDate = '2008-02-22'
  --SET @EndDate   = '2008-02-29'
  
  SELECT 
    FullName, 
    DATEPART(MONTH, dob) AS MONTH, 
    DATEPART(DAY, dob) AS DAY, 
    CONVERT(VARCHAR(10), dob, 111) AS dob
  FROM 
    People
  WHERE  
    DATEADD(YEAR, DATEDIFF(YEAR,  dob, @StartDate), dob) BETWEEN @StartDate AND @EndDate
  OR 
    DATEADD(YEAR, DATEDIFF(YEAR,  dob, @EndDate), dob) BETWEEN @StartDate AND @EndDate
  ORDER BY 
    CASE WHEN DATEADD(YEAR, DATEDIFF(YEAR,  dob, @StartDate), dob) 
    BETWEEN @StartDate AND @EndDate THEN 1 ELSE 2 END, 
    DATEPART(MONTH, dob), DATEPART(DAY, dob)
  
  
  CREATE TABLE People 
      (
          PK INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
          FullName VARCHAR(30) NOT NULL,
          dob DATETIME NULL
      )
  GO
  
  INSERT INTO People (FullName, dob) VALUES ('John Smith', '1965-02-28')
  INSERT INTO People (FullName, dob) VALUES ('Alex Black', '1960-02-29')
  INSERT INTO People (FullName, dob) VALUES ('Bill Doors', '1968-02-27')
  ...
  --shortened for clarity
  </code></pre>
  
  <p>However, with the data above, my goal is to display <code>Alex Black</code>'s birthday for year 2014 as <code>2/28/2014</code> and for year 2016 as <code>2/29/2016</code>.</p>
  
  <p>Also, if you are in the mood, my full intentions are the following:</p>
  
  <p>I want to pass 2 dates, not matter how far apart: <code>@DateFrom date = '1/1/2014'</code> and <code>@DateTo date = '12/31/2016'</code>. The result I want back is</p>
  
  <pre><code>FULLNAME        DOB
  Bill Doors      2014-02-27
  John Smith      2014-02-28
  Alex Black      2014-02-28
  Bill Doors      2015-02-27
  John Smith      2015-02-28
  Alex Black      2015-02-28
  Bill Doors      2016-02-27
  John Smith      2016-02-28
  Alex Black      2016-02-29 -- note this year the date is feb 29th
  </code></pre>