본문 바로가기

Database/MSSQL

How to Determine Whether Two Date Ranges Overlap

간단하지만 많이 필요로 하는 두 데이터 기간의 overlap 판정을 위한 로직을 소개하려고 합니다.

다음의 두 기간이 있고, 겹치는 날짜가 있는 지를 판정해야합니다.


기간1: 시작일1 ~ 종료일1 (예: 2016-06-17~2016-06-24)

기간2: 시작일2 ~ 종료일2 (예: 2016-06-20~2016-06-30)

위의 두 기간은 일부 겹치는 구간이 있습니다.


필요한 결과값은 두 기간이 겹침 여부 (bool)이므로 다음의 로직을 적용하여 복잡한 조건 없이 결과만 판단할 수 있습니다.

Reference를 보시면 해당 조건의 proof가 있으므로 참조하세요.

(시작일1 <= 종료일2) AND (종료일1 >= 시작일2)


특별한 내장함수 등의 활용이 없으므로, 대부분의 RDB에서 동일하게 활용할 수 있습니다. 


Reference

http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap