[MySQL] 정규표현식과 문자열 함수

짱J·2023년 2월 28일
0
post-thumbnail

1️⃣ 정규표현식

정규표현식이란?

: 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어

  • 문자열을 처리하는 방법 중 하나로, 특정한 조건의 문자를 검색하거나 치환하는 과정을 매우 간편하게 처리할 수 있다.

매칭

패턴기능사용 예시설명
.문자 하나"..."문자열의 길이가 세 글자 이상인 것을 찾는다
또는 (OR)"가나다⎮라마바"'가나다' 또는 '라마바'에 해당하는 문자열을 찾는다
[][] 안에 나열된 패턴에 해당하는 문자열을 찾는다"[123]d"대상 문자열에서 '1d' 또는 '2d' 또는 '3d'인 문자열을 찾는다
^시작하는 문자열을 찾는다"^시작"대상 문자열에서 '시작'으로 시작하는 문자열을 찾는다
$끝나는 문자열을 찾는다"끝$"대상 문자열에서 '끝'으로 끝나는 문자열을 찾는다

횟수

패턴기능사용 예시설명
*0회 이상 나타나는 문자"a*"'a'가 0번 이상 등장하는 문자열을 찾는다 ex) a, aa, b
+1회 이상 나타나는 문자"찌개+"'찌개'가 1번 이상 등장하는 문자열을 찾는다 ex) 김치찌개, 된장찌개, 부대찌개
{m, n}m회 이상 n회 이하 나타나는 문자"치{1,2}"'치'가 1회 이상 2회 이하 등장하는 문자열을 찾는다 ex) 치커리, 치카치카
?0~1회 이상 나타나는 문자[가나다]?'가' 또는 '나' 또는 '다'가 0~1회 등장하는 문자열을 찾는다 ex) 가지마, 나라, 안녕

그룹 형태

패턴기능사용 예시설명
[A-z], [:alpha:], \a알파벳 대문자 또는 소문자인 문자열을 찾는다"[A-z]+"대상 문자열에서 알파벳이 1개 이상인 문자열을 찾는다
[0-9], [:digit:], \d]숫자인 문자열을 찾는다"^[0-9]+"한 개 이상의 숫자로 시작하는 문자열을 찾는다
[^문자]괄호 안의 문자를 포함하지 않는 문자열을 찾는다"[^부정]"'부' 또는 '정'을 포함하지 않는 문자열을 찾는다

예시

# regexp 활용
select productid, productname, unit
from products
where unit regexp 'boxes|pieces';

# like 활용
select productid, productname, unit
from products
where unit like '%boxes%'
or unit like '%pieces%';

# 특수문자가 포함된 경우
select productid, productname, unit
from products
where unit regexp '[-/\,`~*+!@#$%^()]';

# 특정 문자 및 길이를 찾는 경우
select *
from products
where char_length(productname)=5
and productname regexp 'ch%';

# 길이가 7글자인 문자열 중 2번째 자리부터 abc를 포함하는 문자열을 찾고 싶을 경우
select *
from tbl
where data regexp '^.abc...$';

# 텍스트와 숫자가 섞여 있는 문자열에서 숫자로만 이루어진 문자열을 찾고 싶을 때
select *
from tbl
where data regexp '^[0-9]+$';

2️⃣ 문자열 함수

문자열 위치

함수기능
FIELD(x, ...)여러 개의 문자열 중 찾는 문자열이 있으면 몇 번째인지 반환, 없는 경우 0 반환
FIND_IN_SET(x, '...')문자열 리스트 중 찾는 문자열의 위치를 찾아 반환, 없는 경우 0 반환
INSTR(기존, 부분)기존 문자열에서 부분 문자열을 찾아 시작 위치 반환, 없는 경우 0 반환
LOCATE(부분, 기존)INSTR 함수와 동일, 매개변수 순서만 반대
SUBSTRING(x, 시작, 길이)문자열을 시작 위치부터 길이만큼 잘라 반환
SUBSTRING_INDEX(x, 구분자, 위치)문자열을 구분자로 나눈 다음 위치 이후, 이전의 문자열을 버림

문자열 변환

함수기능
CONCAT(x1, x2, ...)문자열을 이어서 반환
CONCAT_WS(구분자, x1, x2, ...)문자열 구분자와 함께 이어서 반환
INSERT(기준 문자열, 위치, 길이, 바꿀 문자열)기존 문자열에서 위치부터 길이만큼 삭제 후 바꿀 문자열 삽입
UCASE(x), UPPER(x)소문자 → 대문자
LCASE(x), LOWER(x)대문자 → 소문자
LPAD/RPAD(문자열, 길이, 채울 문자열)왼쪽/오른쪽에서부터 해당 길이만큼 늘리고 빈 공간 채울 문자열 반환
LTRIM/RTIM(x)문자열 왼쪽/오른쪽 공백 제거
REPLACE(문자열, 대상, 바꿀 문자열)문자열에서 대상을 바꿀 문자열로 반환
profile
[~2023.04] 블로그 이전했습니다 ㅎㅎ https://leeeeeyeon-dev.tistory.com/

0개의 댓글