본문 바로가기

Regular Expression

오라클 정규표현식 함수 regexp_replace 샘플예제 (날짜 포맷 변경하기 SQL문) 지난번에 Oracle Regular Expression 함수 regexp_replace( ) 의 기본적인 기능을 살펴봤습니다. 이번에는 조금 더 복잡한 경우를 구현해보고자 합니다. 날짜 포맷이 서양에서 많이 사용하는 'MM/DD/YYYY' 형태로 되어 있는 것을 'YYYY/MM/DD' 로 바꾸고, 구분문자 '/' 도 '-' 로 바꿔 보겠습니다. 먼저, 'MM/DD/YYYY' -> 'YYYY/MM/DD' 변환을 해야 합니다. 뒤에있는 년도(YYYY)를 분리해서 앞으로 가져와야 합니다. 문자열을 분리하기 위해서는 패턴문자열에 괄호 ( ) 로 서브패턴들을 감싸주면 됩니다. 첫번째 ( ) 안에 감싸진 패턴이 \1 이 되고, 두번째 ( ) 안에 감싸진 패턴 결과가 \2 가 되는식입니다. [0-9]{2} 는 "숫자.. 더보기
오라클 정규표현식 함수 regexp_replace 샘플예제 (Email 주소에서 @앞부분만 다른 문자열로 바꿔치기 SQL문) 지난번에 Oracle Regular Expression 함수 regexp_replace( ) 의 기본적인 기능을 살펴봤습니다. 이번에는 조금 복잡한 경우를 구현해보고자 합니다. 문자열내에 Email 주소가 들어있고, 그 이메일주소에서 @뒷부분은 그대로 남겨두고 앞부분만 다른 문자열로 바꿔치기 하는 것입니다. 지난번 regexp_instr( ), regexp_substr( ) 에 대해 설명하면서 email 주소만 찾아내는 부분을 다뤘었는데, 그것을 응용해서 이용하면 됩니다. 먼저, 패턴에 대해서 설명하자면, + 는 앞의 문자나 패턴이 1번 이상 반복된다는 것을 의미합니다. 마지막 부분에 (\.[[:alnum:]]+)+ 에서 맨끝의 + 는 앞의 패턴이 1번이상 반복됨을 의미합니다. 즉, abc123@foo... 더보기
오라클 정규표현식 함수 regexp_replace 샘플예제 (문자열 바꿔치기, 치환) Oracle Regular Expression 함수 regexp_replace( ) 는 replace( ) 함수에 정규표현식을 쓸 수 있도록 확장한 함수 입니다. replace( ) 함수가 대상문자열에서 특정 문자열(Search String) 찾아서 다른 문자열로 바꿔치기 해주는 함수인데, regexp_replace( ) 함수는 Search String 대신에 "정규표현식"을 쓴다는 점이 다릅니다. regexp_replace() 함수의 구문(Syntax)은 다음과 같습니다. source_char : 대상 문자열 pattern : 정규표현식 패턴 replace_string : 바꿔치기할 문자열 position : 문자열내에서 (패턴을 체크할) 처음 시작 위치 occurrence : 몇번째 일치하는 건지. .. 더보기
오라클 정규표현식 함수 regexp_substr 샘플예제 (문자열내에서 http URL 만 추출하는 SQL문) 앞에서 Oracle 정규표현식 함수 regexp_instr(), regexp_substr() 함수의 기본적인 사용법을 살펴봤습니다. 이번에는 regexp_substr() 함수를 사용해서 http URL 문자열만 분리하는 정규표현식을 만들어보겠습니다. 테스트를 위해 아래와 같이 테스트 테이블을 만듭니다. -- 테스트 테이블 생성 create table DOC_2 ( content1 varchar2(4000) ); insert into DOC_2 values ('http://docs.oracle.com/database/121/SQLRF/functions162.htm#SQLRF06300'); insert into DOC_2 values ('http://jack-of-all-trades.tistory.com/3.. 더보기
오라클 정규표현식 함수 regexp_instr, regexp_substr 샘플예제 (문자열의 위치 찾기, 추출하기) Oracle Database 에 있는 일반 문자열 함수 instr(), substr() 에 Regular Expression(정규식)을 쓸 수 있도록 한 것이 regexp_instr(), regexp_substr() 입니다. 기존에 instr() 이 문자열이 나타나는 위치를 리턴하고, substr() 함수가 문자열내에 일부를 잘라내는 기능을 가지고 있는데, regexp_instr(), regexp_substr() 도 똑같습니다. regexp_instr() 함수의 구문(Syntax)은 다음과 같습니다. regexp_substr() 함수의 구문(Syntax)은 다음과 같습니다. source_char : 대상 문자열 pattern : 정규표현식 패턴 position : 문자열내에서 (패턴을 체크할) 처음 시작.. 더보기
오라클 정규표현식 함수 regexp_count 함수 샘플예제 (문자열내에 반복 패턴 카운트) 오라클에서 제공하는 정규표현식(Regular Expression) 지원 함수중에서 regexp_count() 함수는 문자열중에 매칭되는 문자열 또는 패턴이 몇번 나오는지 카운트 합니다. Oracle 의 기존 count() 함수는 로우갯수(레코드 갯수)를 세는데 반해, regexp_count() 는 하나의 문자열내에서 반복문자열의 갯수를 세는 점이 크게 다릅니다. regexp_count 기본 구문(Syntax)는 다음과 같습니다. 예제를 통해서 사용법을 확인해보면, ♣ 문자열내 3번째 위치부터 '123' 이 몇번 반복되는지 카운트 '123123123123' 문자열에서 '123' 은 4번 반복되는데, 3번째 문자위치부터 카운트해서 3번 이라는 결과가 나왔습니다. ♣ 문자열내에서 'CD' 가 몇번 반복되는지 .. 더보기
오라클 like 구문 업그레이드 regexp_like 샘플예제 (전화번호 포맷이 일치하지 않는 데이터 찾아내기 SQL문) 앞에서 오라클 정규표현식 regexp_like 를 이용해서 기존에 like 만 가지고 조회하기 어려웠던 것을 매우 쉽게 하는 것을 살펴봤습니다. 이번에는 좀더 복잡한 형태의 like 조회 예제를 해보겠습니다. 오라클 hr 샘플유저에 있는 EMPLOYEES 테이블의 phone_number 를 조회하면, 아래와 같이 전화번호가 2가지 형태로 들어가 있습니다. 이 전화번호 데이터에서 특정 형태(포맷)와 일치하는 데이터만 조회하고자 하는 경우, 일반 like 문으로는 구현하기 매우 까다롭습니다. 하지만, regexp_like(...) 를 이용하면 아주 간단하게 조회할 수 있습니다. 패턴문자열 '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})' 는 999.999.99.. 더보기
오라클 like 구문 업그레이드 regexp_like 샘플예제 (정규표현식 기본 응용) 오라클에서 제공하는 정규표현식 지원 함수 regexp_like 를 이용하면 기존 like 구문에서 할 수 없었거나 아주 어렵게 구현했던 부분들을 아주 쉽게 구현할 수 있습니다. regexp_like 기본 구문(Syntax) 는 다음과 같습니다. 예제를 통해서 사용법을 확인해보면, ♣ 문자열내에 특정문자(A, M, S) 문자가 들어가 있는 이름 찾기 '|' 기호는 or 의 의미를 가지고 있습니다. 근데, and 의 의미를 가진 '&' 는 없습니다. ㅎㅎ & 는 정규표현식에 원래 없습니다. ♣ 특정문자(N)로 끝나는 이름 찾기 ♣ 특정문자(S)로 시작하는 이름 찾기 $ 는 문자 뒤에 붙이고, ^ 는 문자 앞에 붙이는 차이가 있습니다. ♣ 특정문자(A, M, S) 문자가 들어가 있는 이름 찾기 (대소문자 구분.. 더보기