SQL 스터디를 진행하며 JOIN, GROUP BY, UNION, STRING DATE 등등 풀어왔지만, SQL에서는 문자, 숫자로 구성된 컬럼을 어떻게 분할하고 처리하는 지 궁금해 살펴보니 정규표현식이란 것을 발견하게 되었다.
함수로는 REGEXP로 표현하며 LIKE를 이용한 검색과 달리 SQL에서 기본 연산자보다 복잡한 문자열 조건을 걸어 데이터를 검색할 수 있다.
하지만, 정규표현식 검색을 이용할 때 절대 사용자에게 정규식 기능을 제공해선 안된다.
각종 오류를 포함해 SQL Injection에 취약해지기에 검색을 이용할 경우, 개발자가 미리 정한 테두리 내에서 행해져야만 한다.✍️ REGEXP란?
- 특정 규칙을 가진 문자열 집합을 표현하는데 사용하는 형식 언어
- 문자열을 처리하는 방법 중 하나로 특정 조건의 문자를 검색, 치환하는 과정을 간편하게 함
- SQL부터 스크립트 언어까지 다양한 곳에서 활용 가능
- Pattern을 사용해 문자열 처리
💯 Pattern 종류
1) Matching1
2) Numbers Limit
3) String Group
4) Not
💯 예제
# 길이 7글자인 문자열 중 2번째 자리부터 abc를 포함하는 문자열을 찾고 싶을 때 # 정규표현식을 사용하지 않을 때 SELECT * FROM table WHERE CHAR_LENGTH(data) = 7 AND SUBSTRING(data, 2, 3) = 'abc'; # 정규표현식을 사용할 때 SELECT * FROM table WHERE data REGEXP ('^.abc...$'); # 텍스트와 숫자가 섞여 있는 문자열에서 숫자로만 이루어진 문자열을 찾고 싶을 때 # 정규표현식을 사용하지 않을 때 SELECT * FROM tbl WHERE data LIKE ?????????? # 정규표현식을 사용할 때 SELECT * FROM tbl WHERE data REGEXP ('^[0-9]+$'); -- OR data REGEXP ('^\d$') -- OR data REGEXP ('^[:digit:]$');