오라클 CONNECT BY LEVEL 간단설명.
계층형? 쿼리에서 자주 볼 수 있는 CONNECT BY 절에서, LEVEL을 사용하면, 원하는 만큼의 행을 리턴할 수 있다.
음... 나는 주로 원하는 기간(날짜) 만큼 루프를 돌리거나, 또는 가로행을 세로행으로 표현해야 할 때.! 유용하게 사용함...
예제.)
--1부터 7까지 7행을 리턴시킴.
SELECT *
FROM DUAL A, (SELECT
LEVEL LV FROM DUAL CONNECT BY LEVEL
<= 7) B;
--결과
DUMMY | LV
ㅡㅡㅡㅡㅡㅡㅡ
X | 1
X | 2
X | 3
X | 4
X | 5
X | 6
X | 7
Tip.)
--원하는 기간 리턴 (일자만큼)
SELECT V_DATE
FROM (SELECT
TO_CHAR(TO_DATE('20140201', 'YYYYMMDD')+LEVEL-1, 'YYYYMMDD') V_DATE
FROM DUAL
CONNECT BY LEVEL <= TO_DATE('20140314',
'YYYYMMDD')-TO_DATE('20140201', 'YYYYMMDD')+1);
--원하는 기간 리턴 (월별)
SELECT V_DATE
FROM (SELECT
TO_CHAR(ADD_MONTHS(TO_DATE('201401','YYYYMM'), LEVEL-1),'YYYYMM') AS
V_DATE
FROM DUAL
CONNECT BY LEVEL <=
MONTHS_BETWEEN(TO_DATE(TO_CHAR(SYSDATE,'YYYYMM'),'YYYYMM'),TO_DATE('201401','YYYYMM'))+1);
---------------------------------------------------------------
select FN_TO_DATE('20140201000000') + (level-1) AS TDAY
from dual
connect by level <= ( FN_TO_DATE('20140228000000') - FN_TO_DATE('20140201000000') + 1 )
----------------------------------------------------------------
이번달 날짜 구하기~
SELECT TRUNC (SYSDATE, 'month') + (LEVEL - 1) AS TDAY
FROM DUAL
CONNECT BY LEVEL <= (LAST_DAY (SYSDATE) - TRUNC (SYSDATE, 'month') + 1)
'Programming > DataBase' 카테고리의 다른 글
CREATE TABLESPACE & CREATE USER (0) | 2014.07.13 |
---|---|
[oracle] decode 함수 (0) | 2014.04.04 |
[oracle] 날짜함수 (0) | 2014.03.20 |
[oracle] TRUNC 함수 (0) | 2014.03.20 |
group by (0) | 2013.10.24 |