포스트

SQLD: PIVOT & UNPIVOT, 정규표현식

PIVOT절과 UNPIVOT절

PIVOT : 행에 있는 데이터를 열로 바꾸기

1
2
3
4
5
6
7
8
9
10
11
SELECT * 
FROM (
    SELECT 년월, 지점코드, 매출액 -- 사용하려는 컬럼만 명시 
    FROM 월별매출
    )
PIVOT ( -- 행을 열로 바꾸려는 컬럼과 값을 입력  
    SUM(매출액) FOR 년월 IN ('202201' AS '2022-1') -- 집계처리를 할 컬럼을 입력  
                            ,('202202' AS '2022-2')
                            ,('202203' AS '2022-3') 
    )
ORDER BY 지점코드;  

UNPIVOT : 열에 있는 데이터를 행으로 바꾸기

1
2
3
4
5
6
7
SELECT * 
FROM PIVOT_TABLE
UNPIVOT ( -- 행을 열로 바꾸려는 컬럼과 값을 입력  
    매출액 FOR 년월 IN ("2022-1" AS '202201') -- 집계처리를 할 컬럼을 입력  
                        ,("2022-2" AS '202202')
                        ,("2022-3" AS '202203') 
    )    

정규표현식

정규표현식이란? (= 패턴화된 표현식)

  • 데이터에서 특정 규칙을 가지는 문자열을 찾거나 처리하는데 도움이 되는 고급 쿼리 방법
  • 패턴이 특정 형식을 만족하는가? 예: hello@mail.com 혹은 010-1234-5678 처럼 이메일, 휴대폰 패턴이 맞는지 확인 - LIKE의 고급형 (REGEXP_LIKE)
  • 패턴에서 특정 문자열을 치환할 때 사용 가능 - REPLACE의 고급형 (REGEXP_REPLACE)
  • 패턴에서 특정 문자열을 추출할 때 사용 가능 - SUBSTR의 고급형 (REGEXP_SUBSTR)
  • 패턴에서 특정 문자열의 반복개수를 확인할 때 사용 가능 - (REGEXP_COUNT)
  • 패턴에서 특정 문자열이 존재하는지 확인 - (REGEXP_INSTR)

정규표현식 와일드카드

. : 모든 문자와 일치 (모든 문자, 문자 1개와 일치)
| : 대체 문자를 구분 (연결연산자 |, OR 개념 [A|B] A 혹은 B)
\ : 특수문자를 이스케이프 처리 (백슬래시)
\d{n} : 숫자를 의미하며, n에 있는 값이 숫자의 개수 - 단순히 \d 면 숫자 한 개

숫자

^ : 캐럿 - 문자열의 시작
$ : 문자열의 끝

수량사 - 표현식을 일치하는 횟수 - 탐욕적이다. 즉, 최대한 많이 매칭시킨다.

? : 0~1회 일치
* : 0~무제한 일치
+ : 1~무제한 일치
{m} : m회 일치
{m,} : 최소 m회 일치
{m, n} : 최소 m회 ~ 최대 n회 일치

수량사

결과

문자리스트를 이용한 표현식:

PERL: [0-9] [a-z] [A-Z] [a-zA-Z]

\w : 문자 1개

PERL 방식의 정규표현식 - 비탐욕적이다. 즉, 최소한만을 구한다.

?? : 0~1회 일치
*? : 0~무제한 일치
+? : 1~무제한 일치
{m}? : m회 일치
{m,}? : 최소 m회 일치
{m, n}? : 최소 m회 ~ 최대 n회 일치

REGEXP_LIKE

LIKE처럼 매칭연산을 하며, 정규표현식이 매칭되면 TRUE, 아니면 FALSE를 반환한다.

REGEXP_REPLACE

REGEXP_REPLACE('hello@temp.com', '@.+', '@realdomain.net') AS new_email FROM dual;

@.+를 찾아 @realdomain.net으로 변경하겠다는 말이다.

REGEXP_INSTR

일치하는 패턴의 시작 위치를 반환하며, 매칭값이 없을 시 0을 반환한다.

REGEXP_COUNT

패턴에 일치하는 개수를 확인한다.


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.