다음과 같은 데이터가 존재하고
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' --검색시작일자
'database' 카테고리의 다른 글
오라클 정규표현식을 이용한 전화번호 포맷팅 (1) | 2010.04.12 |
---|---|
주민등록번호로 나이를 구하는 Query (0) | 2008.10.24 |
Database 버전 확인 (0) | 2008.04.16 |
ORACLE에서 한글을 지원하는 캐릭터셋 (0) | 2008.02.20 |
ORACLE dictionary (user_updatable_columns) (0) | 2007.12.06 |