DB 쿼리 작업을 하다보면, 테이블에 insert 쿼리문를 대량으로 작성해야 하는 경우가 많다.
특히, 엑셀로 작업한 결과물을 DB에 insert 하거나, update 해야 할 경우 쿼리문 작성으로 고단한 경우가 종종 발생한다.

정규식을 활용하여 원하는 정보를 쿼리식으로 손쉽게 만드는 방법에 대해서 알아보자.


위와 같은 테이블 정보에 아래의 데이터를 INSERT 해야 한다.

엑셀과 같이 입력하고 싶은 자료를 정규식을 지원하는 Notepad2와 같은 편집기에 복사 & 붙여넣기한다.

라인의 처음 시작 부분은 정규식에서 ^로 표시한다.

^(\d{4})한 줄의 시작 부분이 숫자(\d)로된 4자리 글자를 먼저 선택한다.(숫자 4자리 선택)
이렇게 한 줄의 첫번째 되는 부분을 정확히 일치시켜야 줄 중간에서 숫자 4자리를 무시하고 처리할 수 있다.
선택 범위 :  [8001]

^(\d{4})[\t]+숫자 4자리로 시작하고, 그 다음 탭으로 떨어진 공간을 선택한다.(TAB까지 선택)
선택 범위 :  [8001 TAB]

^(\d{4})[\t]+([^\t]+)탭으로 떨어진 공간 다음에, 탭이 아닌 문자를 선택한다.(TOM까지 선택)
선택 범위 :  [8001 TAB TOM]

위와 같이 탭으로 떨어진 문자 [\t]+, 탭이 아닌 문자 ([^\t]+) 를 반복적으로 기입한다.

^(\d{4})[\t]+([^\t]+)[\t]+([^\t]+)[\t]+([^\t]+)[\t]+([^\t]+)[\t]+([^\t]+)[\t]+([^\t]+)[\t]+(\d+)$선택 범위 :  [8001 TAB TOM TAB DBA TAB 8400 TAB 1981-12-03 TAB 3000 TAB 10 TAB 40]

중간 부분은 [\t]+ 탭과 ([^\t]+) 탭을 포함하지 않은 문자열로 구분하면 되지만,
시작부분과 마찬가지로 종료 부분에는(\d+)$      : 숫자로 종료(0-9)
(\w+)$      : 문자로 종료(a-z, A-Z)
([\d|\w]+)$ : 숫자나 문자로 종료(0-9, a-z, A-Z)
를 명시적으로 표기해야 한다.
(단, \w는 a-z, A-Z의 문자열을 말하며 한글 문자열을 지원하지 않는다.)

위와 같이 작성된 정규표현식을 찾을문자에 입력하고 찾기 버튼을 누르면, 한 줄씩 선택되는 것을 확인할 수 있다.

이때, 중요한 점! 지난번에도 언급했듯이 정규표현식에서 () 괄호로 묶은 것은 그룹으로 처리된다.
첫번째 괄호로 묶인 문자열은 \1로 치환할 수 있고,
두번재 괄호로 묶인 문자열은 \2로 치환할 수 있다....
또한, 괄호로 묶인 전체 문자열 \0로 치환할 수 있다.

우리가 치환하고자 하는 부분은 이미 괄호로 8번 묶어 놓은 상태 이므로,
바꿀 문자에 다음과 같이 입력하고 모두 바꾸기를 수행해 보자.

INSERT INTO TEST_EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values ( \1, '\2', '\3', \4, '\5', \6, \7, \8);


위와 같이 모두 바꾸기를 수행하면 다음과 같은 결과를 볼 수 있다.

지금까지 INSERT 문을 정규표현식을 이용하여 간단히 바꾸는 과정을 알아 보았다.

간단하지만 강력한 정규표현식.
위와 같이 적은 양의 자료를 입력할때에는 복사 붙여넣기로 해결되지만,
최소 천건에서 2-3만건의 자료를 처리할 때에는 정규표현식을 만드신 분이 정말 눈물나게 고맙게 느껴진다. ^^;

2009/03/28 11:32 2009/03/28 11:32

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요