오라클 정규식 질문요 0 3 1,394

by 꼬랑지 [SQL Query] [2019.01.22 10:42:22]


오라클 정규식을 보고 있는데 아래 쿼리 작동원리가 궁금합니다.

 

WITH T AS (
SELECT 'AE123' COLA FROM DUAL UNION ALL
SELECT 'Aeou123' COLA FROM DUAL UNION ALL
SELECT '123AEGHT' COLA FROM DUAL UNION ALL
SELECT 'AE123uuuET' COLA FROM DUAL UNION ALL
SELECT '12AAEee123' COLA FROM DUAL
)
SELECT *
FROM T
WHERE 1=1
AND REGEXP_LIKE(COLA,'([aeiou])\1','i')

 

위 쿼리를 실해하면 같은 모음이 두번이상 반복되는 데이타가 검색되는데 이게 어떻게 작동하는 건가요?

해석 좀 해 주실분.....

by 랑에1 [2019.01.22 11:33:24]

1. [...] : 괄호 안에 단일 문자 일치 

2. () : 괄호로 묶인 표현식을 한 단위로 취급

3. \n : 괄호 안에 그룹화 된 n 번째(1-9) 선행 하위식과 일치 

4. 'i' : 대소문자 구분하지 않음

위의 정보를 짜집기 해보면

1. []안의 'a' or 'e' or 'i' or 'o' or 'u'를 포함하는데

2. 위 1이 하나의 단위가 되고

3. 괄호안의 그룹화된 n번째  식이 1번이므로 

4. 대소문자 구분을 하지않고

   []안의 단일문자가 연속된 데이터를 검색하게 된다.

얼추 이렇지 않을까 싶습니다.

 


by 꼬랑지 [2019.01.22 13:12:04]

 []안의 단일문자가 연속된 데이터를 검색하게 된다

이 부분을 잘 모르겠네요. 어떤 메커니즘으로 해서 그런 기능을 하게되는지 ㅎㅎ;;;


by 랑에1 [2019.01.22 13:28:47]

말그대로 문자한개를 말하는겁니다.
아래와 같이 []를 빼고 조회해보면 'aeiou' 문자열 전체가 반복된 패턴만 조회됨을 확인할 수 있습니다. 

WITH T AS (
SELECT 'aeiouaeiou' COLA FROM DUAL UNION ALL -- 조회됨
SELECT 'aeiouaeio' COLA FROM DUAL UNION ALL -- 조회안됨
SELECT 'aa' COLA FROM DUAL -- 조회안됨
)
SELECT *
FROM T
WHERE 1=1
AND REGEXP_LIKE(COLA,'(aeiou)\1','i')
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입