select * from member where REGEXP_LIKE(email,'\w+@\w+.(com|org|net)');
우선 내가 저번에 저장한 member 테이블에서 전화번호를 검색한다고 하자.
우선 이전 포스트에서 설명한 단순 패턴비교 연산으로도 검색이 가능하다.
select *from member where phone like '%-%-%';
이렇게 말이다. 그런데 이럼 문제가 있다. 범위가 너무 넓다는 것이다. %는 숫자 문자, 영어 등 모든 문자를 포함한 값이 올수 있다는 것인데, 숫자뿐 아니라 김치-바나나-학성고 등의 문자열도 검색되버릴수 있다는 것이다. 그래서 우리는 좀더 정교한 검색을 위해 정규식을 사용할 수 있다. 우선 [ ] 연산자는 1자리를 나타낸다. 예를들면.
select * from member where REGEXP_LIKE(phone,'01[0-9]-\d{4}-\d{4}');
--[0-9] 와 \d는 같은 의미이다.
이렇게 일반적인 전화번호를 나타낼 수 있다. 그런데 { } 이 괄호는 바로 앞에 있는 문자의 똑같은 반복이다. 자리수는 바로 앞에 있는 문자를 제외한다. 즉 4면 0부터 9까지의 수가 4자리 올수 있다는 뜻이다.
이메일도 알아보자면, 우선 [0-9] 와 동일시되는 정규식이 \d 였다면 마찬가지로 이메일은 문자 숫자 다 올수 있으므로, [0-9a-zA-Z]와 동일시 되는 정규식을 찾아야 한다. 바로 \w이다. 여기서 \d 와 \D , \w와 \W 의 차이를 궁금할 수 있는데 이것은 그냥 ^(not)연산자의 차이이다. 즉 \D는 숫자를 제외한 모든 문자 이고, \W는 영어, 숫자를 제외한 모든 문자이다.
select * from member where REGEXP_LIKE(email,'\w+@\w+.(org|net|com)');
이러면 이메일 형식으로 검색이 가능하다. 그런데 난 또 의문이 들었다. 그럼 . 자체는 "아무 문자 1개가 올수있음" 을 나타내는 정규식 표현인데 막상 문자열 그대로 "." 를 검색할려면 어떻게 해야 할까? 자바에서 특수문자를 표현할때 역슬레시를 쓰는 것 처럼 여기도 그러면 되지 않을까? 라는 생각을 하였고 테스트를 해 보았다.
우선 맨 위 테이블 처럼 테이블의 name 칼럼에 "최동훈" 과 "최.훈"을 넣어서 아래의 쿼리의 결과를 비교해 보았다.
select * from member where REGEXP_LIKE(naem, '최.훈');
결과
아무 문자 1개를 뜻하는 정규식 패턴 '.' 의 의미에 맞게 모든 테이블이 출력되었다.
select * from member where REGEXP_LIKE(name,'최\.훈');
결과
정말 최"."훈 이라고 이름붙여진 테이블만 출력되었다.
이것을 통해 내 가설이 맞았다.ㅎㅎ 자바처럼 특수문자를 어떤 형식에 표현할때는 역슬레시를 붙여주면 된다. 그렇지 않으면, 그 특수문자가 기능하는 표현법으로 컴퓨터가 인식한다.
그래서 위 이메일 검색도
select * from member where REGEXP_LIKE(email,'\w+@\w+\.(org|net|com)');
이게 맞는 표현이다. \.는 정규식 표현 . 이 아니라 문자열 그대로의 . 을 의미하므로.
공부시간 1시간 30분.
순공부시간 40분.
오늘 오전에 또 어르신 모시고 병원 간다고 오전공부를 못했다. 그리고 오후에도 한번 한 내용을 다시 직접 프로그래밍 을 하면서 복습하니 조금 물린다..ㅎㅎㅎ 그래도 조금만 더 하면 기존 공부한 내용은 다 끝내고 새로운 진도를 나갈수 있으니 조금만 참자 !!. 그리고 나름의 기준을 세웠는데 하루에 이론공부는 최소 30분을 하기로 마음먹었다. 즉, 30분 공부 + 20분 직접코딩 + 알고리즘 문제풀이 1시간 이상. 이렇게 루틴을 짜면 될거 같다.
'Programming > SQL' 카테고리의 다른 글
문자열 함수 LOWER,UPPER, PAD, INSTR. 2021-07-30 (0) | 2021.07.30 |
---|---|
ROWNUM을 이용한 페이징 출력, 중복제거 distinct 키워드, 문자열 자르기 SUBSTR 함수. 2021-07-29 (0) | 2021.07.29 |
비교연산자, 관계연산자, 패턴 연산자 실습+ 테이블 스페이스가 저장되는곳. 2021-07-26 (0) | 2021.07.26 |
커밋과 롤백, DATE 형 칼럼에 값 insert 하기. 2021-07-23 (0) | 2021.07.23 |
insert, update, delete 쿼리의 실행.2021-07-21 (0) | 2021.07.21 |