[Oracle] 오라클 특수문자 찾기 (정규식)
- 데이터베이스/오라클
- 2023. 7. 25.
오라클에서 문자열에 특수문자가 포함되었는지 검색하기 위해서는 정규식 함수를 사용하면 된다. 오라클 10g부터 정규식 함수를 사용할 수 있으며, [:punct:] 문자 클래스를 사용하면 특수문자를 쉽게 찾을 수 있다. 그 외에도 찾고 싶은 특수문자를 직접 지정하여 검색할 수 있으며, 특수문자가 몇 개 포함되었는지도 확인할 수 있다.
목차 |
특수문자 포함여부 체크 (공백 제외)
WITH temp AS
(
SELECT 'abc,ABC,123,가나다' str FROM dual UNION ALL
SELECT 'abc(ABC)123가나다' str FROM dual UNION ALL
SELECT 'abc@ABC@123@가나다' str FROM dual UNION ALL
SELECT 'abc ABC 123 가나다' str FROM dual UNION ALL
SELECT 'abcABC123가나다' str FROM dual
)
SELECT *
FROM temp
WHERE REGEXP_LIKE(str, '[[:punct:]]')
정규식 함수 (REGEXP_LIKE)를 사용하여 문자열에 특수문자가 포함되었는지 검색할 수 있다.
공백문자를 제외한 기호(특수문자)가 포함된 문자열만 조회된다.
[:punct:]는 POSIX 문자 클래스이며, 아래의 특수문자를 의미한다. ! " # $ % & ' ( ) * + , \ -. / : ; < = > ? @ [ ] ^ _ ` { | } |
특수문자 포함여부 체크 (공백 포함)
WITH temp AS
(
SELECT 'abc,ABC,123,가나다' str FROM dual UNION ALL
SELECT 'abc(ABC)123가나다' str FROM dual UNION ALL
SELECT 'abc@ABC@123@가나다' str FROM dual UNION ALL
SELECT 'abc ABC 123 가나다' str FROM dual UNION ALL
SELECT 'abcABC123가나다' str FROM dual
)
SELECT *
FROM temp
WHERE REGEXP_LIKE(str, '[[:punct:][:space:]]')
[:space:] 문자 클래스를 추가하면 공백문자까지 포함하여 조회된다.
숫자, 소문자, 대문자, 한글을 제외한 문자 체크
WITH temp AS
(
SELECT 'abc,ABC,123,가나다' str FROM dual UNION ALL
SELECT 'abc(ABC)123가나다' str FROM dual UNION ALL
SELECT 'abc@ABC@123@가나다' str FROM dual UNION ALL
SELECT 'abc ABC 123 가나다' str FROM dual UNION ALL
SELECT 'abcABC123가나다' str FROM dual
)
SELECT *
FROM temp
WHERE REGEXP_LIKE(str, '[^0-9a-zA-Z가-힣]')
[^0-9a-zA-Z가-힣] 문자 클래스를 사용하면 숫자, 소문자, 대문자, 한글을 제외한 문자가 존재할 경우 조회된다.
지정한 특수문자가 포함되었는지 체크
WITH temp AS
(
SELECT 'abc,ABC,123,가나다' str FROM dual UNION ALL
SELECT 'abc(ABC)123가나다' str FROM dual UNION ALL
SELECT 'abc@ABC@123@가나다' str FROM dual UNION ALL
SELECT 'abc ABC 123 가나다' str FROM dual UNION ALL
SELECT 'abcABC123가나다' str FROM dual
)
SELECT *
FROM temp
WHERE REGEXP_LIKE(str, '[!@#$%&,]')
위의 예제처럼 검색할 특수문자([!@#$%&,])만 지정하여 조회할 수 있다.
특수문자 체크 및 개수 세기 (REGEXP_COUNT 함수)
WITH temp AS
(
SELECT 'abc,ABC,123,가나다' str FROM dual UNION ALL
SELECT 'abc(ABC)123가나다' str FROM dual UNION ALL
SELECT 'abc@ABC@123@가나다' str FROM dual UNION ALL
SELECT 'abc ABC 123 가나다' str FROM dual UNION ALL
SELECT 'abcABC123가나다' str FROM dual
)
SELECT str
, REGEXP_COUNT(str, '[[:punct:]]') AS cnt
FROM temp
WHERE REGEXP_COUNT(str, '[[:punct:]]') > 0
REGEXP_COUNT 정규식 함수를 사용하여 특수문자 포함 여부를 조회할 수 있다.
또한 문자열에서 특수문자의 개수도 구할 수 있다.
특수문자 체크 및 위치 찾기 (REGEXP_INSTR 함수)
WITH temp AS
(
SELECT 'abc,ABC,123,가나다' str FROM dual UNION ALL
SELECT 'abc(ABC)123가나다' str FROM dual UNION ALL
SELECT 'abc@ABC@123@가나다' str FROM dual UNION ALL
SELECT 'abc ABC 123 가나다' str FROM dual UNION ALL
SELECT 'abcABC123가나다' str FROM dual
)
SELECT str
, REGEXP_INSTR(str, '[[:punct:]]') AS pos
FROM temp
WHERE REGEXP_INSTR(str, '[[:punct:]]') > 0
REGEXP_INSTR 정규식 함수를 사용하여 특수문자 포함 여부를 조회할 수 있다.
또한 문자열에서 특수문자의 위치도 구할 수 있다.