Database/SQL

SQL 정규 표현식(Regular Expression) - 문자 데이터(한글)

Iam_im2 2021. 10. 19. 22:08
728x90

1. 문자 관련 패턴

패턴 기능 예시 설명
. .의 수는 문자의 수를 의미한다. .. 문자 두개를 찾는다.
| 문자열을 구분해준다. 대한|사람 대한사람을 찾는다.
[ ] [ ]안에 있는 데이터 값을 찾는다. [0-3]82 “082”,“182”,“382” 값을 찾는다.
( ) ( )안에 있는 문자열 묶음을 찾는다. (만세) 한 단어인 만세를 찾는다.
% 와일드 카드. 일치하는 문자를 찾는다. %점수 영어점수”,“한국사점수”,“컴활점수를 출력

 

 

 

2. 예제

SELECT location FROM cafe WHERE REGEXP_LIKE(location,'지점');

location 컬럼에서 지점이 들어간 데이터를 모두 출력한다.

 

 

 

▶데이터 중 00지점 혹은 000지점 혹은 0000지점 형태의 문자열인 값을 출력 때

SELECT location FROM cafe WHERE REGEXP_LIKE (location,'^(..(지점)|...(지점)|....(지점))$');

지점 앞의 글자수를 아는 경우에는 문자수를 지정해서 해당 값이 아닌 값을 오류값으로 출력하면된다.

 

SELECT location FROM cafe WHERE REGEXP_LIKE (location,'^((..|...|....)(지점))$');

위의 조건식에서 중복되는 단어를 최소화해서 더 정갈하게 하면 이렇게 된다.

 

SELECT location FROM cafe WHERE NOT REGEXP_LIKE (location,'^지점+$');

지점 앞의 글자수를 모를 경우, ‘지점이라는 단어만 들어가면 정상값으로 보고 출력할 경우

 

SELECT 컬럼명 FROM 테이블명 WHERE NOT REGEXP_LIKE(컬럼명, 조건식);

데이터 중 00지점 혹은 000지점 혹은 0000지점 형태의 문자열인 값을 출력이 아닌 값을 오류 값으로 출력할 때는 정규식 앞에 NOT을 붙이면 된다.

 

 

SELECT
COUNT컬럼명
FROM DB Owner이름.파일명
WHERE 컬럼명 like '%지점'
;

그러나 00지점 혹은 000지점 혹은 0000지점 형태처럼 데이터 형식이 분명하게 정해져있다고 보기 힘든 문자열의 경우, 정규식보다는 일반 함수를 사용하는게 더 나을 수도 있다. 위 식은 해당 컬럼에 지점이라는 단어가 몇 번 포함되어있는지 카운팅하는 구문이다. %를 사용해 지점으로 끝나는 단어를 찾는다.

 

 

그리고 SQL구문이 이상하다 싶으면 REGEXPER에서 확인하면 된다. 문제점을 금방 발견할 수 있다. 

와, 오늘 진짜 열심히 공부했다.

 

 

 

3. 참고사이트

MS

구글 고객센터

728x90