Calculate the year for ending month/day?

Posted by Dave Jarvis on Stack Overflow See other posts from Stack Overflow or by Dave Jarvis
Published on 2010-05-13T03:25:32Z Indexed on 2010/05/13 3:54 UTC
Read the original article Hit count: 258

Filed under:
|

Given:

  • Start Year
  • Start Month & Start Day
  • End Month & End Day

What SQL statement results in TRUE if a date lands between the Start and End days?

1st example:

  • Start Date = 11-22
  • End Date = 01-17
  • Start Year = 2009
  • Specific Date = 2010-01-14
  • TRUE

2nd example:

  • Start Date = 11-22
  • End Date = 11-16
  • Start Year = 2009
  • Specific Date = 2010-11-20
  • FALSE

3rd example:

  • Start Date = 02-25
  • End Date = 03-19
  • Start Year = 2004
  • Specific Date = 2004-02-29
  • TRUE

I was thinking of using the MySQL functions datediff and sign plus a CASE condition to determine whether the year wraps, but it seems rather expensive. Am looking for a simple, efficient calculation.

Update 1

The problem is the end date cannot simply use the year. The year must be increased if the end month/day combination happens before the start date. The start date is easy:

Start Date = date( concat_ws( '-', year, Start Month, Start Day ) )

The end date is not so simple.

Update 2

Here is what I was thinking about for obtaining the end year:

end_year =
    case
        sign( diff(
           date( concat_ws( year, start_month, start_day ) ), 
           date( concat_ws( year, end_month, end_day ) ) ) )
    when -1 then Start_Year + 1
    else Start_Year
    end case

Then wrap that expression (once syntactically correct) inside of another date, followed by BETWEEN statement.

Update 3

To clear up some confusion: there is no end year. The end year must be calculated.

Thank you!

© Stack Overflow or respective owner

Related posts about mysql

Related posts about dates