우선 정규식을 실습할 테이블이다.
num, name, email에 데이터 들어가 있다.
-- name이 한 또는 백으로 시작하는 레코드만 출력해라.
우리가 정규식을 배우기 전에 했던 방식
SELECT * FROM reg WHERE SUBSTR(name, 1, 1) IN ('한', '백');
SELECT * FROM reg WHERE INSTR(name, '한') = 1 OR INSTR(name, '백') = 1;
정규식을 이용해 출력하기
SELECT * FROM reg WHERE REGEXP_LIKE(name, '^[한백]');
-- name : 강산으로 끝나는 레코드
SELECT * FROM reg WHERE REGEXP_LIKE(name, '강산$');
-- com으로 끝나는 email
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'com$');
-- 소문자만 가능
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'com$', 'i');
-- 대소문자 구분 안함
-- email : kim포함
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim');
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim*');
-- email : kim3?3 가운데 한글자가 뭐든지 상관없음
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim3?3');
-- email : kim 다음에 0~3 사이의 문자가 2번 반복
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim[0-3]{2}');
-- email : kim 다음에 2~3 사이의 문자가 3~4번 반복
SELECT * FROM reg WHERE REGEXP_LIKE(email, 'kim[2-3]{3,4}');
-- email : kim다음에 1이 아닌 레코드
SELECT* FROM reg WHERE REGEXP_LIKE(email, 'kim[^1]');
-- email : k로 시작하지 않는 사람들
SELECT* FROM reg WHERE REGEXP_LIKE(email, '^[^k]');
-- name : 이름이 한글인 사람만
SELECT* FROM reg WHERE REGEXP_LIKE(name, '^[가-힣]{2,}$');
-- email : 숫자가 있는 이메일을 출력
SELECT* FROM reg WHERE REGEXP_LIKE(email, '[0-9]');
SELECT* FROM reg WHERE REGEXP_LIKE(email, '[[:digit:]]');
-- email : 영문자가 존재하는 이메일 출력
SELECT* FROM reg WHERE REGEXP_LIKE(email, '[a-z|A-Z]');
REGEXP_LIKE(컬럼, '정규식'); 을 통해 컬럼에서 원하는 데이터만 출력해보았다.
REGEXP_REPLACE 는 문자열을 지정한 패턴으로 치환한다.
SELECT 'hong gil dong' FROM dual;
SELECT REGEXP_REPLACE('hong gil dong', '(.*) (.*) (.*)', '\2 \3 \1') FROM dual;
-- . 은 한글자 * 0자 이상
-- (.*) 모든 글자
-- email 에 숫자 없애기
SELECT email, REGEXP_REPLACE(email, '[[:digit:]]', '')FROM reg;
-- 특수 문자 제거
SELECT REGEXP_REPLACE('우리&*나라 12 대!@한', '[[:digit:]|[:punct:]]', '') FROM dual;
-- 숫자와 특수문자 제거
SELECT REGEXP_REPLACE('우리&*나라 12 대!@한', '[[:digit:]|[:punct:]]', '') FROM dual;
-- 지정된 위치부터 문자를 *로 치환
SELECT REGEXP_REPLACE ('00090931111111', '[0-9]', '*', 9) FROM dual;
-- 7번째 위치부터 [0-9] 문자를 *로 치환
-- 영문자(한글도 포함)가 아닌 문자의 위치
SELECT name, REGEXP_INSTR(name, '[^[:alpha:]]') FROM reg;
-- 이름에 소문자가 아닌 문자가 존재하는 위치
SELECT name, REGEXP_INSTR(name, '[^[:lower:]]') FROM reg;
-- 이름에 문자가 아닌 것이 있는 위치
SELECT name, REGEXP_INSTR(name, '[^[:alpha:]]') FROM reg;
:alpha: 는 한글도 검색한다.
-- email에서 @ 뒤부분을 제외한 ID부분 출력
SELECT email, REGEXP_SUBSTR(email, '[^@]+') FROM reg;
-- email : 0~9 범위의 수가 몇개 존재하는지
SELECT email, REGEXP_COUNT(email, '[0-9]') FROM reg;
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0818_Oracle : INVISIBLE, VISIBLE COLUMN (1) | 2021.08.19 |
---|---|
0818_Oracle : 페이징처리 [21.08.23 수정] (2) | 2021.08.19 |
0817_Oracle : SYNONYM 시노님 (2) | 2021.08.18 |
0817_Oracle : SEQUENCE 시퀀스 (1) | 2021.08.18 |
0817_Oracle : VIEW 뷰를 이용한 데이터 추가 및 수정 삭제 (0) | 2021.08.18 |