오라클, 티베로 에서 날짜 더미 테이블 만들기 !!

 

날짜 더미 테이블이 필요했다.


이유는 날짜 YMD 라는 컬럼이 기본키이며 인덱스가 잡혀 있는데


타입이 CHAR(8) 타입이였다....ㅠㅠ (yyyymmdd)


WHERE 절에서 BETWEEN 을 하려고 YMD 컬럼을


DATA TYPE 으로 케스팅 했다.


 

SELECT *
FROM temp_table
WHERE TO_DATE(ymd, 'yyyymmdd'
      BETWEEN TO_DATE('20150101''yyyymmdd') AND 
      TO_DATE('20151231''yyyymmdd')
cs


 

이렇게 쿼리를 만들었더니


인덱스를 타지 못했다....


WHERE 조건에서 형변환이 일어나면 안된다....

 

인덱스에 잡히지 않아 


YMD 컬럼의 타입인 CHAR 타입을 유지하고

WHERE 절에 IN 조건을 만들려다보니

 

구하고자 하는 날짜 (기간) 사이의 더미 날짜 목록이 필요했다

 

 

 

 

SELECT *
FROM temp_table
WHERE ymd IN (
               SELECT TO_CHAR( TO_DATE('20150101''YYYYMMDD'+ ROWNUM-1'YYYYMMDD') AS DAY
               FROM DUAL
               CONNECT BY level <= ROUND( TO_DATE('20151231''YYYYMMDD'- TO_DATE('20150101''YYYYMMDD') )
             )
cs

 

굿....

 

WHERE 절에 더미 SELECT 문으로 IN 조건을 줬다.

 

인덱스만 태웠는데 속도가 엄청나다 ㅎㅎ

 

 

 

 

 

 

아래는 날짜 더미 쿼리이다.

 

SELECT TO_CHAR( TO_DATE('20150101''YYYYMMDD'+ ROWNUM-1'YYYYMMDD') AS DAY
FROM DUAL
CONNECT BY level <= ROUND( TO_DATE('20151231''YYYYMMDD'- TO_DATE('20150101''YYYYMMDD') )
cs

 

by 개발자 CofS 2016.01.12 10:28