[Oracle] 오라클 특수문자 찾기 (정규식)

오라클에서 문자열에 특수문자가 포함되었는지 검색하기 위해서는 정규식 함수를 사용하면 된다. 오라클 10g부터 정규식 함수를 사용할 수 있으며, [:punct:] 문자 클래스를 사용하면 특수문자를 쉽게 찾을 수 있다. 그 외에도 찾고 싶은 특수문자를 직접 지정하여 검색할 수 있으며, 특수문자가 몇 개 포함되었는지도 확인할 수 있다.

 

목차
  1. 특수문자 포함여부 체크 (공백 제외)
  2. 특수문자 포함여부 체크 (공백 포함)
  3. 숫자, 소문자, 대문자, 한글을 제외한 문자 체크
  4. 지정한 특수문자가 포함되었는지 체크
  5. 특수문자 체크 및 개수 세기 (REGEXP_COUNT 함수)
  6. 특수문자 체크 및 위치 찾기 (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 *
  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 정규식 함수를 사용하여 특수문자 포함 여부를 조회할 수 있다.

또한 문자열에서 특수문자의 위치도 구할 수 있다.

 

[Oracle] 정규식 사용법 쉽게 설명 (REGEXP)

오라클 10g부터 정규식을 사용할 수 있도록 함수가 추가되었다. 정규식을 사용하면 문자열을 패턴으로 찾거나 자를 수 있기 때문에 기존의 복잡하게 구현된 쿼리문을 정규식 함수를 사용하여 간

gent.tistory.com

 

댓글

Designed by JB FACTORY