소문자가 하나라도 들어있는 데이터만 추출하기 위하여 정규식을 이용한 SQL 구문을 작성하고자 인터넷을 찾아보니 아주 정리를 잘 해 놓은 블로그가 있어서 갈무리 한다.
참조사이트 : http://goalker.tistory.com/71
[사용예제]
소문자 영문자가 들어있는 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[a-z]') ;
대문자 영문자가 들어있는 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[A-Z]') ;
대소문자 영문자가 들어있는 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[a-zA-Z]') ;
소문자로 시작하고 뒤에 공백이 있는 모든 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[a-z] ') ;
소문자로 시작하고 공백이 1칸 있고 숫자로 끝나는 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[a-z] [0-9]') ;
공백이 있는 모든 데이터를 찾고 싶은 경우
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[[:SPACE:]]') ;
대문자가 연속적으로 2글자 이상오는 경우 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[A-Z]{2}') ;
대문자가 연속적으로 3글자 이상오는 경우 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[A-Z]{3}') ;
시작을 대문자나 소문자로 하는 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'^[a-zA-Z]') ;
시작을 숫자나 대문자로 시작하는 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'^[0-9A-Z]') ;
여러가지 조건을 줄 경우 바 기호(|) 를 사용하여 연결 할 수도 있음
소문자로 시작하거나, 숫자로 시작하는 경우
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'^[a-z] | ^[0-9]') ;
STUDENT 테이블에서 학생의 ID중 첫 글자가 s(소문자) 로 시작하고 두번째 글자가 a 나 t가 나오는 id 출력
- SELECT name, id FROM STUDENT WHERE REGEXP_LIKE( id,'^s(a|t).') ;
소문자로 끝나는 모든 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'[a-z]$') ;
^(캐럿)문자가 대괄호 안에 들어갈 경우에는 대괄호 안의 문자가 아닌 다른 것만 출력하라는 의미
소문자로 시작하지 않는 행을 모두 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'^[^a-z]') ;
STUDENT 테이블에서 학생의 id를 조사해 4번째 자리에 v(소문자) 가 있는 행을 출력
- SELECT name, id FROM STUDENT WHERE REGEXP_LIKE( id,'^...v.') ;
특정 조건을 제외한 결과 출력 (NOT)
영문자(대소문자)를 포함하지 않는 행을 출력
- SELECT * FROM reg_test WHERE NOT REGEXP_LIKE( text,'[A-Za-z]') ;
특수문자 찾기
( '*' 나 '?' 같은 기호는 SQL에서 '모든것' 이라는 뜻을 가진 메타캐릭터 문자이기 때문에 \붙여줘야 한다.)
?가 들어간 행 출력
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'\?') ;
?가 들어가지 않는 행 출력
- SELECT * FROM reg_test WHERE NOT REGEXP_LIKE( text,'\?') ;
소문자가 들어 있는 모든 행을 출력 (찾고자 하는 쿼리의 앞에 '*' 나 '?' 를 사용 뒤에 쓰면 적용X)
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'*[a-z]') ;
- SELECT * FROM reg_test WHERE REGEXP_LIKE( text,'?[a-z]') ;
숫자 부분을 '@' 기호로 변경
- SELECT text , REGEXP_REPLACE( text,'[[:digit:]]','@') FROM reg_test ;
숫자를 찾아서 숫자 뒤에 '-*' 을 추가
- SELECT text , REGEXP_REPLACE( text,'[0-9]','\1-*') FROM reg_test ;
reg_test2 테이블에서 ip의 .(dot) 부분을 모두 삭제하고 출력
- SELECT no, ip, REGEXP_REPLACE(ip,'\.','') FROM reg_test2 ;
reg_test2 테이블에서 ip의 첫번째 .(dot) 부분을 '/' (슬래쉬) 기호로 변경해서 출력
- SELECT no, ip, REGEXP_REPLACE(ip,'\.','/',1,1) FROM reg_test2 ;
사용자가 ID를 'abc 123' 이렇게 입력했을 경우 'abc' 와 '123' 사이의 공백을 없애고 싶은 경우
- SELECT REGEXP_REPLACE('abc 123','( ){1,}','') FROM dual ;
위 예제에서 {1,} 부분을 {1}로 해도 무방
{} 내의 숫자는 앞문자가 나타나는 횟수 또는 범위를 의미
예를 들어 a{5} 'a' 의 5번 반복인 aaaaa
a{3,} 는 'a'가 3번 이상 반복인 aaa , aaaa , aaaaa ... 등을 의미
a{3,5} 는 aaa , aaaa , aaaaa 를 의미
ab{2,3} 은 뒤의 b가 2번, 3번 반복된 형태로 abb , abbb 를 의미
{,}를 붙이면 이상을 의미
아이디 입력시 : (공백) 75 true 를 입력하였을때 중간 중간 공백을 모두 제거하는 방법
- SELECT studno,name,id FROM student WHERE id=REGEXP_REPLACE('&id','( ){1,}','') ;
text 중에서 '*' 의 위치를 찾는 방법
- SELECT text, REGEXP_INSTR(text,'\*') FROM reg_test ;
'abc* *def %ghi,jkl' 이란 문자열에서 첫 글자가 공백이 아니고 ('[^ ]') 그 후에 'def'가 나오는 부분을 추출
- SELECT REGEXP_SUBSTR('abc* *def %ghi,jkl' , '[^ ]+[def]') FROM dual ;
주어진 문자열에서 소문자 'a'가 몇개인지 찾아 주는 예
- SELECT text, REGEXP_COUNT(text,'a') FROM reg_test ;
'컴퓨터활용 > 오라클' 카테고리의 다른 글
윈도우7에서 Oracle 11g Client 삭제하기 (2) | 2013.10.05 |
---|---|
오라클 비밀번호 대소문자구분 없애기 (0) | 2013.09.07 |
ORA-28000: the account is locked (0) | 2013.09.07 |
ORA-00257: archiver is stuck 오류 (1) | 2012.04.08 |
오라클 SUBSTR 으로 LEFT, RIGHT 처리 (0) | 2012.03.07 |