oracle / 날짜 더미 테이블 만들기 / 오라클 / 티베로 / tibero / dummy
2016. 1. 12. 10:28ㆍdatabase/oracle
오라클, 티베로 에서 날짜 더미 테이블 만들기 !!
날짜 더미 테이블이 필요했다.
이유는 날짜 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') +1 - 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 |
'database > oracle' 카테고리의 다른 글
오라클 버전 확인 쿼리 (2) | 2018.02.08 |
---|---|
ORACLE expdp / ora-06512 (0) | 2017.10.24 |
oracle 컬럼 가로 표시 / xmlagg 특수문자 치환 / WM_CONCAT / Listagg (0) | 2017.04.10 |
oracle sybase 비교 (0) | 2017.03.27 |
toad 주석 기울임꼴 제거 / comment Italic (0) | 2017.02.20 |
oracle / 한 컬럼에 콤마(',') 구분자로 되어있는 코드 치환하기 (0) | 2016.01.05 |
oracle / hint / 힌트 종류 정리 (1) | 2016.01.05 |
oracle / SQLPLUS 원격지 접속 / cmd 원격접속 (0) | 2016.01.05 |
oracle / DB Link 만들기 (0) | 2016.01.05 |
oracle / ORA-00904 / 스칼라 서브쿼리 / with (0) | 2016.01.05 |