Пример приведен для PostgreSQL, но думаю и в других тоже будет работать.
Периоды start1 - end1, start2 - end2.
Пример рассчитан на то, что мы заранее знаем, что периоды пересекаются (start1 <= end2 AND end1 >= start2).
Код: SQL
| SELECT LEAST(end1, end2) - GREATEST(start1, start2);
|
Т.е. из более раннего окончания вычитаем более позднее начало, в результате получим интервал в днях пересечения двух периодов.