ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle 정규식
    알고리즘, SQL/SQL 2023. 11. 14. 12:02

    개요

    HackerRank에서 Weather Obervation Station12 문제를 풀고 있었다.

    대충 해석해보니까 모음(a,e,i,o,u)로 시작하지도 끝나지도 않는 City들을 뽑으라는 것 같다.(중복되지 않도록)

    그래서 

    SELECT DISTINCT city
    FROM station
    WHERE (city NOT LIKE 'A%' 
           AND city NOT LIKE 'E%' 
           AND city NOT LIKE 'I%' 
           AND city NOT LIKE 'O%' 
           AND city NOT LIKE 'U%')
       AND (city NOT LIKE '%a' 
           AND city NOT LIKE '%e' 
           AND city NOT LIKE '%i' 
           AND city NOT LIKE '%o' 
           AND city NOT LIKE '%u');

    이런식으로  풀었다.

    첫문자는 대문자로 시작하니 A,E,I,O,U 에다가 %를 붙여서 해당 문자로 시작하지 않으면서,

    마지막 문자는 소문자로 끝나니까 %에다가 a,e,i,o,u를 붙여서 풀어줬다.

     

    그런데 다른 사람들은 어떻게 풀었는지 보니까 정규표현식을 사용해서 간단하게 풀었다.

    SELECT DISTINCT city
    FROM station
    WHERE REGEXP_LIKE(city,'^[AEIOU]')
    	AND REGEXP_LIKE(city,'[aeiou]$');

    에..? 단 4줄이요,,?

    현타와서 정규표현식을 정리하기로 했다

     

    Oracle 정규식(REGEXP)

    오라클은 10g부터 정규식을 사용할 수 있도록 함수가 추가 됐다.

    정규식을 사용하면 문자열을 패턴으로 찾거나 자를 수 있기 때문에 기존의 복잡하게 구현된 쿼리문을 정규식 함수를 사용해서 간단하게 처리할 수 있다.

     

     

    기본 메타 문자

    메타 문자  설명
    .  임의의 한 문자
    |  OR과 동일 (왼쪽 또는 오른쪽과 일치)
    [...]  괄호 안의 리스트에 있는 임의의 단일 문자와 일치
    [-] 문자 범위 (0-9, a-z, A-Z, 가-힝)
    [^]  해당 문자에 해당하지 않는 한 문자
    \  다음에 오는 문자를 이스케이프 (메타 문자를 일반 문자로)
    ^  문자열의 시작과 일치
    $  문자열의 끝과 일치

     

     

    정규식 함수

    함수 설명
    REGEXP_LIKE LIKE 연산과 유사/ 정규식 패턴을 검색.
    REGEXP_REPLACE 정규식 패턴을 검색하고 대체 문자열로 변경
    REGEXP_INSTR 정규식 패턴을 검색하여 위치 반환
    REGEXP_SUBSTR 정규식 패턴을 검색하여 부분 문자 추출
    REGEXP_COUNT(v11g) 정규식 패턴을 검색하여 발견된 횟수를 반환

     

    '알고리즘, SQL > SQL' 카테고리의 다른 글

    HackerRank) Weather Observation Station 4  (1) 2023.11.12
Designed by Tistory.