Стандартный SQL имеет оператор OVERLAPS.
CREATE TABLE over_laps
(
start_date date NOT NULL,
end_date date NOT NULL,
CONSTRAINT over_laps_pkey PRIMARY KEY (start_date, end_date),
CONSTRAINT over_laps_check CHECK (start_date < end_date)
)
insert into over_laps values
('2011-01-10', '2011-01-15'),
('2011-01-08', '2011-01-09'),
('2011-01-09', '2011-01-10'),
('2011-01-09', '2011-01-11'),
('2011-01-10', '2011-01-12'),
('2011-01-11', '2011-01-13'),
('2011-01-13', '2011-01-15'),
('2011-01-14', '2011-01-16'),
('2011-01-15', '2011-01-17'),
('2011-01-17', '2011-01-19');
select t1.start_date start_1, t1.end_date end_1,
t2.start_date start_2, t2.end_date end_2
from over_laps t1
inner join over_laps t2
on ((t1.start_date, t1.end_date) overlaps (t2.start_date, t2.end_date))
-- Exclude rows that overlap themselves, a trivial case in a self-joined table.
where t1.start_date <> t2.start_date and
t1.end_date <> t2.end_date