Dates de chevauchement SQL

Ici, nous avons beaucoup de réunions pendant la journée. Généralement de 9h00 à 11h30, de 13h00 à 15h30 et de 16h00 à 18h30.

J'ai du mal à planifier ces réunions. Je ne sais pas comment vérifier s'ils se chevauchent pour la même personne qui dirige la réunion.

Ex: Devrait triggersr une erreur si Person1 a une réunion prévue de 10h00 à 11h00 et une autre de 10h45 à 11h30.

Je suis arrivé à cette solution, mais cela ne fonctionne que partiellement:

if exists ( select 1 from Meeting M where M.IdPerson = @IdPerson --Stored procedure parameter and (@StartDate <= M.EndDate or -- 1 @EndDate >= M.StartDate or -- 2 (@StartDate > M.StartDate and @DtFim < A.Data_Termino))) -- 3 return 1 

Dans l'image ci-dessous, j'explique les trois conditions de la clause where. Les lignes vertes correspondent aux nouvelles dates de début et de fin de la réunion. Les lignes rouges sont les anciennes.

Comment puis-je faire ce travail?

Je pense que la logique que vous voulez est:

 if exists (select 1 from Meeting M where M.IdPerson = @IdPerson and --Stored procedure parameter @StartDate <= M.EndDate and @EndDate >= M.StartDate ) return 1 

(Je ne suis pas sûr si vous voulez <= ou <pour ces comparaisons.) Cela suppose que StartDate et StartDate stockent également le composant time.

Deux périodes se chevauchent si la première commence avant la seconde et se termine après la seconde.