본문 바로가기

database

날짜 포함 비교 Query

다음과 같은 데이터가 존재하고

NAME

START_DATE

END_DATE

 

비교날자

20080701

20080730

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

테스트1

20080702

20080710

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

테스트2

20080624

20080831

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

테스트3

20070601

20080630

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

테스트4

20080801

20080831

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

테스트5

20080630

20080702

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

테스트6

20080730

20080801

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

두개의 날짜를 입력받아 디비에 있는 시작일과 종료일에 포함되는 데이터를 가져오고자 할 때, , 위 경우에서는 비교기간과 비교대상기간이 하나라도 중복되면 데이터를 가져오면 되는것이다.

위 표에서는 1,2,5,6만을 가져오면 되는것이다.

다음과 같이 쿼리를 실행하면 원하는 값을 얻을 수 있다.
이걸 왜 할때마다 까먹을까.. 맨날 위 그림 그려놓고 고민하는듯.. ㅡ.ㅡ;


WITH x AS

     (SELECT '테스트1' AS NAME,

             '20080702' AS start_date,

             '20080710' AS end_date

      FROM   DUAL

      UNION ALL

      SELECT '테스트2' AS NAME,

             '20080624' AS start_date,

             '20080831' AS end_date

      FROM   DUAL

      UNION ALL

      SELECT '테스트3' AS NAME,

             '20070601' AS start_date,

             '20080630' AS end_date

      FROM   DUAL

      UNION ALL

      SELECT '테스트4' AS NAME,

             '20080801' AS start_date,

             '20080831' AS end_date

      FROM   DUAL

      UNION ALL

      SELECT '테스트5' AS NAME,

             '20080630' AS start_date,

             '20080702' AS end_date

      FROM   DUAL

      UNION ALL

      SELECT '테스트6' AS NAME,

             '20080730' AS start_date,

             '20080801' AS end_date

      FROM   DUAL)

SELECT *

FROM   x

WHERE  start_date <= '20080730'--검색종료일자

AND    end_date >= '20080701'  --검색시작일자