지난 시간에 다룬 내용에 가벼운 정리와 함께 나머지 표현도 함께 보자.
[ 정규식 표현(Regular Expression) ]
1. regexp_substr
** 문법
regexp_substr(대상, 패턴, 시작위치, 발견횟수, 옵션, 서브그룹번호)
** 발견횟수(default:1)
패턴에 만족하는 여러 문자열 중 가장 처음 발견되는 문자열을 추출함
2. regexp_replace
** 문법
regexp_replace(대상, 찾을문자열, 바꿀문자열, 시작위치, 발견횟수, 옵션)
** 발견횟수(default:0)
패턴에 만족하는 모든 문자열 치환
-----------------------------------------------------------------------------------------------------------
3. regexp_instr : 문자열의 위치를 리턴
** 문법
regexp_instr(대상, 패턴, 시작위치, 발견횟수)
** 특징
- 시작위치 생략 시 1
- 발견횟수 생략 시 1
select id,
regexp_instr(id, '\d'),
regexp_instr(id, '\W'),
regexp_instr(id, '[[:punct:]]')
from professor;
4. regexp_count
** 문법
regexp_count(대상, 패턴, 시작위치, 옵션)
** 특징
- 시작위치 생략 시 1
- 옵션 생략 가능
select id,
regexp_count(id, '\d'), -- 숫자 하나를 셈
regexp_count(id, '\d+'), -- 숫자의 연속(덩어리)을 셈
regexp_count(id, '\W'), -- _를 제외한 특수기호나 공백을 셈
regexp_count(id, '[[:punct:]]') -- 특수기호(_를 포함)를 셈
from professor;
select 'abc___ 123',
regexp_count('abc___ 123', '\W') -- _는 세지 않고 공백을 셈
from dual;
5. regexp_like
** 문법
regexp_like(대상, 패턴, 옵션)
** 특징
- 함수 결과는 참,거짓 리턴 => where절에서만 사용 가능
- 옵션 생략 가능
예제) 숫자가 포함된 행만 선택
select id
from professor
where regexp_like(id, '\d');
select id
from professor
where regexp_like(id, '[[:punct:]]{2,}');
select count(id) --4
from professor
where regexp_like(id, '[a-z][0-9]+');
select count(id) --0
from professor
where regexp_like(id, '^[a-z][0-9]+'); -- 두번째 글자가 숫자인
select count(id) --3
from professor
where regexp_like(id, '^[a-z]+[0-9]+'); -- 두번째 글자가 숫자인
'SQL' 카테고리의 다른 글
29. 윈도우함수(2) (0) | 2024.11.06 |
---|---|
28. 윈도우함수(1) (0) | 2024.11.05 |
26. 정규식표현(1) (1) | 2024.11.04 |
25. 기타 오브젝트(3) (0) | 2024.11.01 |
24. 기타 오브젝트(2) (1) | 2024.10.31 |