2014/05/02

[Oracle] 년도, 분기 입력으로 날짜 구하기

입력 값 : 년도, 분기
- 년도 : 2013
- 분기 : 3

* SQL1
SELECT '2013' AS YEAR
     , LPAD(1 + (QT * 3), 2, '0') || '01' AS ST_MD
     , LPAD(3 + (QT * 3), 2, '0') || '31' AS END_MD
  FROM ( SELECT '3' - 1 AS QT FROM DUAL) X
* 결과1
YEAR ST_MD END_MD
2013 0701 0931

* SQL2
위 SQL1에서는 해당 분기의 마지막 일자를 31일로 고정시켰으나 정확하게 하기 위해서는 입력 년도와 계산에 의한 월을 가지고 LAST_DAY함수를 사용해야 함.
SELECT '2013' AS YEAR
     , LPAD(1 + (QT * 3), 2, '0') || '01' AS ST_MD
     , LPAD(3 + (QT * 3), 2, '0') || TO_CHAR(LAST_DAY(TO_DATE('2013'||LPAD(3 + (QT * 3), 2, '0'), 'YYYYMM')), 'DD') AS END_MD
  FROM ( SELECT '3' - 1 AS QT FROM DUAL) X
* 결과2
YEAR ST_MD END_MD
2013  0701  0930

상기의 SQL을 인라인뷰(자주 사용된다면 함수로 등록)로 하여 대상 테이블의 BETWEEN 조건으로 활용하면 됨.

댓글 없음:

댓글 쓰기