Tuve una consulta de este tipo con una aplicación de calendario que escribí una vez. Creo que usé algo como esto:
... WHERE new_start < existing_end
AND new_end > existing_start;
ACTUALIZAR Esto definitivamente debería funcionar ((ns, ne, es, ee) =(nuevo_inicio, nuevo_fin, existente_inicio, existente_fin)):
- ns - ne - es - ee:no se superpone y no coincide (porque ne
- ns - es - ne - ee:superposiciones y coincidencias
- es - ns - ee - ne:superposiciones y coincidencias
- es - ee - ns - ne:no se superpone y no coincide (porque ns> ee)
- es - ns - ne - ee:superposiciones y coincidencias
- ns - es - ee - ne:superposiciones y coincidencias
Aquí hay un fiddle