SQL,DBMS/Oracle SQL

기간과 기간이 겹치는 로우 조회하는 쿼리

noodle-dev 2025. 12. 9. 23:04

기간 A와 기간 B가 겹치는 조건은

기간 A와 기간 B가 겹치지 않는 조건의 부정(NOT)과 같다.

이를 활용하면 조건문을 쉽게 작성할 수 있다.

 

 

1. 기간 A와 기간 B가 겹치지 않는 조건

먼저 기간 A와 기간 B가 겹치지 않는 조건은 다음과 같은 경우이다.

겹치지 않는 경우 1: 기간A가 기간B보다 완전히 먼저 끝나는 경우 ( B시작일 > A종료일 )

겹치지 않는 경우 2: 기간A가 기간B보다 완전히 뒤에 끝나는 경우 ( A시작일 > B종료일 )

 

즉, ( 겹치지 않는 경우 1 OR 겹치지 않는 경우 2)

 

이를 쿼리로 표현하면

SELECT *
  FROM TB
 WHERE B시작일 > A종료일
    OR A시작일 > B종료일

 

 

2. 기간 A와 기간 B가 겹치는 조건

1번의 부정 조건은 ( ~(겹치지 않는 경우 1) AND ~(겹치지 않는 경우 2) ) 이다.

 

이를 쿼리로 표현하면

SELECT *
  FROM TB
 WHERE B시작일 <= A종료일
   AND A시작일 <= B종료일

 

 

앞으로는 쉽게 생각하자.