문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| dbms:oracle:devel:regexp:regexp_substr [2013/05/11 20:39] – [숫자/문자 분리] starlits | dbms:oracle:devel:regexp:regexp_substr [2025/10/03 22:30] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| - | ====== | + | ====== REGEXP_SUBSTR ====== |
| - | ===== REGEXP_SUBSTR | + | ===== 정의 |
| + | - 오라클 정규표현식의 일종. | ||
| - | ==== 숫자/ | + | ===== 이메일 아이디 분리 ===== |
| + | - 이메일형식에서 아이디와 메일도메인 부분을 분리하여 조회한다. < | ||
| + | with t as ( | ||
| + | select ' | ||
| + | ) | ||
| + | SELECT email | ||
| + | , | ||
| + | , | ||
| + | FROM t | ||
| + | ; | ||
| + | </ | ||
| + | EMAIL ID | ||
| + | ------------------------ ------------------------ ------------------------ | ||
| + | starlits@adminschool.net starlits | ||
| + | </ | ||
| + | - [[dbms: | ||
| + | - [[dbms: | ||
| + | ===== 숫자/ | ||
| + | |||
| + | ==== 방법 1 ==== | ||
| - STUDYUNITCODE를 숫자와 문자를 분리하여 나타낸다. (맨 앞에 0은 삭제한다.) <code sql> | - STUDYUNITCODE를 숫자와 문자를 분리하여 나타낸다. (맨 앞에 0은 삭제한다.) <code sql> | ||
| SELECT | SELECT | ||
| STUDYUNITCODE, | STUDYUNITCODE, | ||
| - | REGEXP_SUBSTR(REGEXP_REPLACE(STUDYUNITCODE, | + | REGEXP_SUBSTR(REGEXP_REPLACE(STUDYUNITCODE,' |
| - | REGEXP_SUBSTR(STUDYUNITCODE, | + | REGEXP_SUBSTR(STUDYUNITCODE,' |
| FROM TB_STUDYUNIT | FROM TB_STUDYUNIT | ||
| ORDER BY KWON, | ORDER BY KWON, | ||
| - | </ | + | </ |
| - | - 결과값 | + | |
| STUDYUNITCODE TAPE SIDE | STUDYUNITCODE TAPE SIDE | ||
| 줄 24: | 줄 43: | ||
| </ | </ | ||
| - | ==== 페이지정보 찾기 ==== | + | ==== 방법 2 ==== |
| + | - REGEXP_REPLACE 를 이용하여 숫자를 제외시킨다. < | ||
| + | with t as ( | ||
| + | select ' | ||
| + | union all | ||
| + | select ' | ||
| + | ) | ||
| + | select regexp_replace(tape, | ||
| + | from t; | ||
| + | </ | ||
| + | TAPE SIDE | ||
| + | -------------- | ||
| + | 01AB AB | ||
| + | 01BA BA | ||
| + | </ | ||
| + | - REGEXP_REPLACE 를 이용하여 문자를 제외시킨다. < | ||
| + | with t as ( | ||
| + | select ' | ||
| + | union all | ||
| + | select ' | ||
| + | ) | ||
| + | select regexp_replace(tape, | ||
| + | from t; | ||
| + | </ | ||
| + | TAPE SIDE | ||
| + | -------------- | ||
| + | 01AB 01 | ||
| + | 01BA 01 | ||
| + | </ | ||
| + | ===== 페이지정보 찾기 | ||
| - 페이지정보에서 첫페이지를 찾아서 알려준다. <code sql> | - 페이지정보에서 첫페이지를 찾아서 알려준다. <code sql> | ||
| - | SELECT SOURCE, REPLACE(REGEXP_SUBSTR(SOURCE, | + | SELECT SOURCE, REPLACE(REGEXP_SUBSTR(SOURCE,' |
| FROM QUESTION WHERE ROWNUM < 10; | FROM QUESTION WHERE ROWNUM < 10; | ||
| </ | </ | ||
| 줄 44: | 줄 92: | ||
| </ | </ | ||
| - | ==== 주소문자열 자르기 ==== | + | ===== 주소문자열 자르기 |
| - 전체 주소에서 시도, | - 전체 주소에서 시도, | ||
| SELECT | SELECT | ||
| | | ||
| - | , | + | , |
| - | , | + | , |
| - | , | + | , |
| - | , | + | , |
| FROM DV_ADDRESS_TEMP ; | FROM DV_ADDRESS_TEMP ; | ||
| </ | </ | ||
| 줄 61: | 줄 109: | ||
| | 충남 태안군 태안읍 동문리 529-2 | 충남 | 태안군 | 태안읍 동문리 529-2 | 529-2 | | | 충남 태안군 태안읍 동문리 529-2 | 충남 | 태안군 | 태안읍 동문리 529-2 | 529-2 | | ||
| | 충남 태안군 태안읍 동문리 879-3 | 충남 | 태안군 | 태안읍 동문리 879-3 | 879-3 | | | 충남 태안군 태안읍 동문리 879-3 | 충남 | 태안군 | 태안읍 동문리 879-3 | 879-3 | | ||
| + | |||
| + | ===== 구분자로 나누기 ===== | ||
| + | - 숫자를 기준으로 나눈다 <code sql> | ||
| + | with tt as ( | ||
| + | select ' | ||
| + | ) | ||
| + | select | ||
| + | | ||
| + | , | ||
| + | , | ||
| + | from tt; | ||
| + | </ | ||
| + | - 결과값 < | ||
| + | A1 A A3 | ||
| + | --- - ----- | ||
| + | 147 1 36126 | ||
| + | </ | ||
| + | |||
| + | - 공백으로 나눈다 <code sql> | ||
| + | with v_time as ( | ||
| + | select '2016. 1. 29. 오후 11: | ||
| + | ) | ||
| + | select | ||
| + | time | ||
| + | , | ||
| + | || REGEXP_SUBSTR(time,' | ||
| + | || REGEXP_SUBSTR(time,' | ||
| + | , | ||
| + | || REGEXP_SUBSTR(time,' | ||
| + | || REGEXP_SUBSTR(time,' | ||
| + | from v_time; | ||
| + | </ | ||
| + | - 결과값 < | ||
| + | TIME | ||
| + | ------------------------ | ||
| + | 2016. 1. 29. 오후 11: | ||
| + | </ | ||
| + | |||
| + | ===== 전화번호 나누기 ===== | ||
| + | - 전화번호 구분자(-) 로 전화번호를 나눈다. <code sql> | ||
| + | with cust as ( | ||
| + | select ' | ||
| + | ) | ||
| + | select | ||
| + | REGEXP_SUBSTR(phone, | ||
| + | , REGEXP_SUBSTR(phone, | ||
| + | , REGEXP_SUBSTR(phone, | ||
| + | , REGEXP_SUBSTR(phone, | ||
| + | from cust; | ||
| + | </ | ||
| + | - 결과 < | ||
| + | STR STR2 STR3 LAST_STR | ||
| + | --- ---- ---- ---- | ||
| + | 010 1234 5678 5678 | ||
| + | </ | ||
| + | |||
| + | ==== 뒷자리 4자리만 가져오기 ==== | ||
| + | - 구분자없이 뒷자리 4자리만 가져오기 위해서는 regexp_substr 보다 substr 이 더 효과적이다. <code sql> | ||
| + | with cust as ( | ||
| + | select ' | ||
| + | ) | ||
| + | select substr(phone, | ||
| + | from cust; | ||
| + | </ | ||
| + | |||
| + | ===== 첫단어 가져오기 ===== | ||
| + | - 숫자/ | ||
| + | SELECT REGEXP_SUBSTR(' | ||
| + | </ | ||
| + | - 스페이스가 있기 전까지의 첫단어 <code sql> | ||
| + | SELECT REGEXP_SUBSTR(' | ||
| + | </ | ||