Check overlap of date ranges in MySQL

I had such a query with a calendar application I once wrote. I think I used something like this:

... WHERE new_start < existing_end
      AND new_end   > existing_start;

UPDATE This should definitely work ((ns, ne, es, ee) = (new_start, new_end, existing_start, existing_end)):

  1. ns – ne – es – ee: doesn’t overlap and doesn’t match (because ne < es)
  2. ns – es – ne – ee: overlaps and matches
  3. es – ns – ee – ne: overlaps and matches
  4. es – ee – ns – ne: doesn’t overlap and doesn’t match (because ns > ee)
  5. es – ns – ne – ee: overlaps and matches
  6. ns – es – ee – ne: overlaps and matches

Here is a fiddle

Leave a Comment