___  ___    _ _    _  _ _____   _____
 / __|/ _ \  | | |  | || |_ _\ \ / / __|
| (_ | (_) | |_  _| | __ || | \ V /| _|
 \___|\___/    |_|  |_||_|___| \_/ |___|

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

[Oracle] 오라클 SQL에서 정규식 사용하여 문자열 잘라내기(10g 이상)

BY: @capslock | CREATED: Sept. 7, 2017, 2:07 a.m. | VOTES: 6 | PAYOUT: $2.06 | [ VOTE ]

SQL에는 스트링 문자를 잘라내는 SUBSTR이라는 함수가 있습니다.
해당 함수를 잘 활용하면 스트링 처리에 대해서 정말 많은 도움을 받을 수 있습니다.

하지만 특정한 규칙을 갖고 있는 스트링인 경우에는 처리에 제약이 많이 있습니다.
예를들어 아래와 같은 레벨을 갖고 있는 컬럼의 데이타인 경우 각각 레벨을 분리하는 처리

대카테고리>중카테고리>소카테고리 ==> 이런 값들을 '>'으로 분리해서 각각 참조가 필요한 경우에는
INSTR로 '>'의 위치를 찾고 해당 위치를 기준으로 문자열을 잘라내야하는 반복처리가 필요합니다.
굉장히 비효율적이지요

해당기능은 오라클 10g이상에서 쉽게 정규식으로 스트링을 처리할 수 있습니다.

[IMAGE: https://steemitimages.com/DQmUL438yjCh2tVThoN7R3kLLYDw5ZMxXNaasvxncv7RY3v/image.png]

REGEXP_SUBSTR

사용 예

SELECT REGEXP_SUBSTR (email,
                      '[^@]+',
                      1,
                      1)
          AS "ID",
       REGEXP_SUBSTR (email,
                      '[^@]+',
                      1,
                      2)
          AS "MailAddr"
  FROM (SELECT 'hanaro@leesunsin.com' email FROM DUAL);

[IMAGE: https://steemitimages.com/DQmbBncRqZAVDLtwhBgV7wP7uP87h26mLmGz82tcKR5b6fx/image.png]

SELECT ROWNUM rn
     , ip
     , LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 1), 3, '0') ip_1
     , LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 2), 3, '0') ip_2
     , LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 3), 3, '0') ip_3
     , LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 4), 3, '0') ip_4
  FROM (SELECT '10.100.10.1' ip FROM dual
        UNION ALL SELECT '10.100.1.10' FROM dual
        UNION ALL SELECT '100.10.1.10' FROM dual
        UNION ALL SELECT '100.10.1.20' FROM dual
        UNION ALL SELECT '2.10.1.140'  FROM dual)t
 ORDER BY ip_1, ip_2, ip_3, ip_4;

[IMAGE: https://steemitimages.com/DQmecQmh59isfZe9Tie2U6ANWZDU3dvWwfmLda1cDUJtCqD/image.png]

저같은 경우에 REGEXP_SUBSTR를 굉장히 유용하게 사용하고 있습니다.
모르시는 분들이 많을것 같아 도움되시라고 이렇게 정리해서 올립니다.

TAGS: [ #kr-dev ] [ #dev ] [ #kr ] [ #life ] [ #steemit ]

Replies

@flyyou | Sept. 7, 2017, 1:40 p.m. | Votes: 1 | [ VOTE ]

아 SQL 쿼리에도 정규식을 쓸수 있군요 몰랐습니다. 좋은것 알고 갑니다.

@capslock | Sept. 11, 2017, 3:48 a.m. | Votes: 1 | [ VOTE ]

좋게 봐주셔서 감사합니다~

@gaman | Sept. 7, 2017, 11:53 p.m. | Votes: 0 | [ VOTE ]

Resteemed your article. This article was resteemed because you are part of the New Steemians project. You can learn more about it here: https://steemit.com/introduceyourself/@gaman/new-steemians-project-launch

@capslock | Sept. 11, 2017, 3:48 a.m. | Votes: 1 | [ VOTE ]

thank you~~~

@cheerup | Sept. 7, 2017, 11:57 p.m. | Votes: 1 | [ VOTE ]

Cheer Up!
- from Clean STEEM activity supporter

@capslock | Sept. 11, 2017, 3:47 a.m. | Votes: 1 | [ VOTE ]

thank you~

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>