DA Study/TIL

[TIL] MySQL 정규식 REGEXP (Regular Expression) # MySQL # SQL

harrym8n 2025. 1. 19. 15:40

HackerRank Intermediate - Weather Observation Station 7
👉 문제 바로가기(HackerRank)

-- 문제 : CITY컬럼값 중 aeiou로 끝나는 컬럼값만 출력(중복 허용X)

-- 비효율 코드
SELECT DISTINCT CITY
FROM STATION
WHERE CITY LIKE '%a' OR 
    CITY LIKE '%e' OR 
    CITY LIKE '%i' OR 
    CITY LIKE '%o' OR 
    CITY LIKE '%u'

-- 효율 코드
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '[aeiou]$' 

[ 문제 상황 ]

  • 각 모음으로 끝나는 CITY값을 찾기위해 LIKE문 코드를 반복해서 작성해야한다.

[ 해결 ]

  • 정규 표현식 REGEXP을 사용해 코드 한줄로 해결한다.
  • 정규표현식
    표현식 의미
    . 임의의 단일 문자 (줄 바꿈 문자는 제외)
    ^ 문자열의 시작
    $ 문자열의 끝
    [...] 대괄호 안의 문자 중 하나 (문자 클래스)
    [^...] 대괄호 안에 없는 문자 중 하나
    [a-z] 소문자 a부터 z까지의 문자
    [A-Z] 대문자 A부터 Z까지의 문자
    [0-9] 숫자 0부터 9까지의 문자
    ` `
    (expr) 표현식 그룹
    * 앞의 표현식이 0번 이상 반복
    + 앞의 표현식이 1번 이상 반복
    ? 앞의 표현식이 0번 또는 1번 나타남
    {n} 정확히 n번 반복
    {n,} n번 이상 반복
    {n,m} n번 이상 m번 이하로 반복
    [[:<:]] 단어의 시작 (단어 경계)
    [[:>:]] 단어의 끝 (단어 경계)
    [[:alpha:]] 알파벳 문자 (A-Z, a-z)
    [[:digit:]] 숫자 (0-9)
    [[:alnum:]] 알파벳 문자 또는 숫자
    [[:space:]] 공백 문자 (스페이스, 탭, 줄 바꿈 등)
    [[:upper:]] 대문자
    [[:lower:]] 소문자
    [[:punct:]] 구두점 문자
    [[:cntrl:]] 제어 문자 (NULL, ESC 등)
    [[:xdigit:]] 16진수 숫자 (0-9, A-F, a-f)

[ 회고 ]

  • 정규표현식은 데이터베이스의 텍스트 데이터에서 특정 패턴을 빠르게 찾기 위해 사용하며, 복잡한 문자열 패턴을 처리해야 할 때 SQL만으로는 해결하기 어려운 작업을 유연하고 코드 가독성이 높게 수행할 수 있게 한다.