데이터베이스/MySQL
[MySQL] 코딩 테스트용 정리 (2) 문자열 활용과 정규표현식
waterground
2021. 12. 26. 15:07
목차
1. 문자열 비교
2. 문자열 자르기 (SUBSTRING)
3. 방향 기준 문자열 자르기 (LEFT, RIGHT)
4. 구분자를 기준으로 문자열 자르기 (SUBSTRING_INDEX)
5. 특정 문자열 포함 확인하기 (LIKE)
6. 정규표현식 (REGEXP)
문자열 비교 (!= 또는 ==)
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;