anpv
Guest
Узнать пересечение 2-х интервалов дат
Доброго времени суток.
Подскажите как узнать пересечение 2-х интервалов дат в SQL-запросе.
Т.е. имеются 4 даты:
date1_start, date1_end и date2_start, date2_end
Первый времнной промежуток date1 составляют даты date1_start, date1_end, а второй date2 составляют даты date2_start, date2_end.
В таблице содержатся 2 поля типа DATETIME date_start и date_end.
Нужно узнать не пересекаются ли эти два промежутка дат.
Т.е. возможны 4 ситуации:
1) Промежуток date1 содержит date2
2) Промежуток date2 содержит date1
3,4) Промежутки date1 и date2 пересекаются по start и end
Я делаю так:
select count(*) from table where (date_start >= "2004/6/1" and date_start <= "2004/6/10") or (date_end >= "2004/6/1" and date_end <= "2004/6/10") or (date_start >= "2004/6/1" and date_end <= "2004/6/10") or (date_start <= "2004/6/1" and date_end >= "2004/6/10");
Что не очень красиво и слишком громоздко и непонятно.
Доброго времени суток.
Подскажите как узнать пересечение 2-х интервалов дат в SQL-запросе.
Т.е. имеются 4 даты:
date1_start, date1_end и date2_start, date2_end
Первый времнной промежуток date1 составляют даты date1_start, date1_end, а второй date2 составляют даты date2_start, date2_end.
В таблице содержатся 2 поля типа DATETIME date_start и date_end.
Нужно узнать не пересекаются ли эти два промежутка дат.
Т.е. возможны 4 ситуации:
1) Промежуток date1 содержит date2
2) Промежуток date2 содержит date1
3,4) Промежутки date1 и date2 пересекаются по start и end
Я делаю так:
select count(*) from table where (date_start >= "2004/6/1" and date_start <= "2004/6/10") or (date_end >= "2004/6/1" and date_end <= "2004/6/10") or (date_start >= "2004/6/1" and date_end <= "2004/6/10") or (date_start <= "2004/6/1" and date_end >= "2004/6/10");
Что не очень красиво и слишком громоздко и непонятно.