본문 바로가기
Programming/DataBase

CONNECT BY LEVEL

by 막이 2014. 3. 27.

오라클 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