상세 컨텐츠

본문 제목

ORACLE ( CONNECT BY / 사이드로 LPAD, RPAD 함수 까지)

DataBase/Oracle

by H_Develop 2022. 10. 25. 16:36

본문

CONNECT BY 구성

 

WHERE              데이터를 가져온 뒤 마지막으로 조건절에 맞게 정리

START WITH      어떤 데이터로 계층구조를 지정하는지 지정

                            - 가장 처음에 데이터를 거르는 플랜을 타고, 컬럼에 인덱스가 있어야 한다.

CONNECT BY    각 행들의 연결 관계를 설정

                            - 결과에는 LEVEL이라는 컬럼이 있으며, 계층의 깊이를 의미한다.

 

 

 

CONNECT BY 사용법

 

SELECT LEVEL AS NO
 FROM DUAL
CONNECT BY LEVEL <=10

 - 결과
no
1
2
3
4
5
6
7
8
9
10

LEVEL 을 10까지 표현

SELECT '2020년 '||LPAD(LEVEL, 2, 0)||'월' AS NO
FROM DUAL
CONNECT BY LEVEL <= 12

no
2020년 01월
2020년 02월
2020년 03월
2020년 04월
2020년 05월
2020년 06월
2020년 07월
2020년 08월
2020년 09월
2020년 10월
2020년 11월
2020년 12월

LPAD(왼쪽을 채움), RPAD(오른쪽을 채움) 함수

 LPAD("값", "총 문자길이", "채움문자")

 

SELECT LEVEL, LPAD(LEVEL, 5), LPAD(LEVEL, 5, '0')
FROM DUAL
CONNECT BY LEVEL <= 10

 

                     level                                       lpad(level,5)                                                  lpad(level,5,'0')

1     1 00001
2     2 00002
3     3 00003
4     4 00004
5     5 00005
6     6 00006
7     7 00007
8     8 00008
9     9 00009
10   10 00010

"총 문자길이" - Length("값") = 채움문자수

 SELECT TO_DATE('20200701', 'YYYYMMDD') + (LEVEL-1) AS DT
   FROM DUAL
CONNECT BY LEVEL <= (TO_DATE('20200717', 'YYYYMMDD') - TO_DATE('20200701', 'YYYYMMDD')) + 1

 - 결과
 
 dt
2020-07-01 00:00:00
2020-07-02 00:00:00
2020-07-03 00:00:00
2020-07-04 00:00:00
2020-07-05 00:00:00
2020-07-06 00:00:00
2020-07-07 00:00:00
2020-07-08 00:00:00
2020-07-09 00:00:00
2020-07-10 00:00:00
2020-07-11 00:00:00
2020-07-12 00:00:00
2020-07-13 00:00:00
2020-07-14 00:00:00
2020-07-15 00:00:00
2020-07-16 00:00:00
2020-07-17 00:00:00

 

WITH WD AS
(
    SELECT TO_DATE('20200701', 'YYYYMMDD') AS FROM_DT   -- 시작일자
         , TO_DATE('20200717', 'YYYYMMDD') AS TO_DT     -- 종료일자    
      FROM DUAL
)
SELECT DT, DT2
  FROM ( 
     SELECT TO_CHAR(FROM_DT + (LEVEL-1), 'YYYYMMDD') AS DT
          , TO_CHAR(FROM_DT + (LEVEL-1), 'YYYY-MM-DD') AS DT2
       FROM WD
    CONNECT BY LEVEL <= (TO_DT - FROM_DT) + 1
  )
  
   - 결과
   
   dt			dt2
20200701	2020-07-01
20200702	2020-07-02
20200703	2020-07-03
20200704	2020-07-04
20200705	2020-07-05
20200706	2020-07-06
20200707	2020-07-07
20200708	2020-07-08
20200709	2020-07-09
20200710	2020-07-10
20200711	2020-07-11
20200712	2020-07-12
20200713	2020-07-13
20200714	2020-07-14
20200715	2020-07-15
20200716	2020-07-16
20200717	2020-07-17

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

SQL developer  (0) 2022.06.14
Procedure (프로시저)  (0) 2022.06.14
PL/SQL 기본 문법 (반복문 LOOP, WHILE, FOR / 조건문 IF, CASE )  (0) 2022.06.14
TRIGGER  (0) 2022.06.13
CURSOR (커서)  (0) 2022.06.13

관련글 더보기