Oracle/Tuning2019. 8. 16. 11:56

날짜 조회 안티 패턴 두 번째 글이다.


테스트를 위해 아래와 같이 테이블을 생성하자.

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 AS SELECT TRUNC (SYSDATE) AS c1 FROM DUAL;

아래 쿼리는 월요일에서 금요일까지의 평일을 조회한다. 열을 가공하지 않았지만 의미를 해석하기 어렵다.

-- 2
SELECT c1
     , TRUNC (SYSDATE) - TO_CHAR (SYSDATE, 'D') + 2 AS bd
     , TRUNC (SYSDATE) - TO_CHAR (SYSDATE, 'D') + 6.99999421 AS ed
  FROM t1
 WHERE c1 BETWEEN TRUNC (SYSDATE) - TO_CHAR (SYSDATE, 'D') + 2
              AND TRUNC (SYSDATE) - TO_CHAR (SYSDATE, 'D') + 6.99999421;

C1                  BD                  ED
------------------- ------------------- -------------------
2019-08-16 00:00:00 2019-08-12 00:00:00 2019-08-16 23:59:59

1개의 행이 선택되었습니다.

아래 쿼리처럼 IW 포맷을 사용하면 평일을 쉽게 조회할 수 있다.

-- 3
SELECT c1
     , TRUNC (SYSDATE, 'IW') AS bd
     , TRUNC (SYSDATE, 'IW') + 5 AS ed
  FROM t1
 WHERE c1 >= TRUNC (SYSDATE, 'IW')
   AND c1 <  TRUNC (SYSDATE, 'IW') + 5;

C1                  BD                  ED
------------------- ------------------- -------------------
2019-08-16 00:00:00 2019-08-12 00:00:00 2019-08-17 00:00:00

1개의 행이 선택되었습니다.


'Oracle > Tuning' 카테고리의 다른 글

MERGE JOIN CARTESIAN  (0) 2019.08.23
날짜 조회 안티 패턴 #3  (0) 2019.08.16
날짜 조회 안티 패턴 #1  (0) 2019.08.14
아우터 조인과 OR 조건  (0) 2019.08.14
조인 순서 변경에 의한 수행 시간 증가  (0) 2019.07.20
Posted by 정희락_