데이터베이스/MySQL

[MySQL] 코딩 테스트용 정리 (2) 문자열 활용과 정규표현식

waterground 2021. 12. 26. 15:07

목차

1. 문자열 비교
2. 문자열 자르기 (SUBSTRING)
3. 방향 기준 문자열 자르기 (LEFT, RIGHT)
4. 구분자를 기준으로 문자열 자르기 (SUBSTRING_INDEX)
5. 특정 문자열 포함 확인하기 (LIKE)
6. 정규표현식 (REGEXP)

7. 문자를 숫자로, 숫자를 문자로

8. 문자열 대체(replace)


 

문자열 비교 (!= 또는 ==)

SELECT *
FROM 테이블이름
WHERE 행이름 != "문자열";

 

문자열 자르기 (SUBSTRING)

  • SUBSTR, SUBSTRING 모두 가능하며, 시작점과 길이를 정해 자를 수 있다.
SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)

-- str: 원본 문자열 -- pos: 시작 위치값 -- len; 가져올 길이값
SELECT SUBSTRING("ABCDEF", 3);  -- CDEF
SELECT SUBSTRING("ABCDEF" FROM 3);  -- CDEF
SELECT SUBSTRING("ABCDEF", 3, 5);  -- CDE
SELECT SUBSTRING("ABCDEF" 3 FROM 5); -- CDE
SELECT SUBSTRING("ABCDEF" FROM 4 FOR 2); -- DE

 

방향 기준 문자열 자르기 (LEFT, RIGHT)

  • 오른쪽, 왼쪽 부터 문자열을 자른다
SELECT LEFT("ABCDEF", 3);  -- ABC
SELECT RIGHT("ABCDEF", 3);  -- DEF

 

구분자를 기준으로 문자열 자르기 (SUBSTRING_INDEX)

SUBSTRING_INDEX(문자열, 구분자, 구분자 인덱스)
SELECT SUBSTRING_INDEX('010-1234-1234', '-', 2);  -- 010-1234
SELECT SUBSTRING_INDEX('010-1234-1234', '-', -2);  -- 1234-1234


-- 문자열 SPLIT 기능으로 활용
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('010-1234-5678', '-', 2), '-', -1) -- 1234

 

특정 문자열 포함 확인하기 (LIKE)

  • %은 1개 이상의 문자가 포함됨을 의미한다
  • *은 1개의 문자가 포함됨을 의미한다.
SELECT *
FROM 테이블이름
WHERE 행이름 LIKE "문자열%"; -- 문자열1, 문자열123 등

SELECT *
FROM 테이블이름
WHERE 행이름 LIKE "문자열*"; -- 문자열1, 문자열2 등

 

정규표현식 (REGEXP)

  • 행이름 REGEXP (정규표현식) 을 사용해 조건을 간단하게 정리할 수 있다.
-- 2,3,4번째 글자가 순서대로 a, b, c이며 7글자인 문자열을 찾아야 하는 경우

-- 정규표현식 사용 전
SELECT *
FROM 테이블 이름
WHERE CHAR_LENGTH(행이름) = 7 AND SUBSTRING(행이름, 2, 3) = 'abc';

-- 정규표현식 사용 후 
SELECT *
FROM 테이블 이름
WHERE 행이름 REGEXP ('^.abc...$');

-- 앞뒤 정규표현식
WHERE 행이름 REGEXP ('^[aeiou].*[aeiou]$');

 

패턴 기능 설명
. 문자 하나를 매칭 ".an" ban, van....
+ 1회 이상 매칭 "books+" books, bookss, booksss ...
* 0회 이상 매칭 "books*" book, books, booksss....
? 0회 또는 1회 매칭 "books?" book, books
^ 시작하는 문자열 매칭 "^a" a, abc, ad, abcdefg....
$ 끝나는 문자열 매칭 "z$" z, yz, abeyz.....
[] 대괄호 안 모든 문자와 각각 매칭 "[abc]d" ad, bd, cd
{m,n} m회 이상 n회 이하 반복되는 문자열 매칭 "abc{1,2}" abc, abcabc....
| OR 연산 "A|B" A 또는 B에 해당하는 문자열
[A-z] 또는 \a 알파벳 대문자, 소문자롤 포함한 문자열 매칭 "[A-z]+" 알파벳이 1개 이상인 문자열
[0-9] 또는 \d 숫자인 문자열 매칭 "^[0-9]+" 숫자로 시작하는 문자열
[^문자] 해당 문자로 시작하지 않는 문자열 매칭 "[^1]+" 234, 23, 4..... (1로 시작하지 않는 문자열)

 

문자를 숫자로, 숫자를 문자로

SELECT CAST('123' as int(3));

SELECT CAST(123 as CHAR(3));

이 외에도 binary, char, signed(부호 있는 수), date, datetime, time, unsigned(부호 없는 수)가 가능하다.

 

문자열 대체(replace)

select ceil(avg(salary)-avg(replace(salary,'0','')))
from employees;