반응형
MySQL에서 문자열을 앞에서, 뒤에서, 또는 중간에서 잘라야 할 일이 많다.
이럴 때 필요한 핵심 함수가 바로 LEFT(), RIGHT(), SUBSTRING()이다.
각 함수의 차이점과 실무 사용법, 주의할 점까지 예제와 함께 정리해보자.

🔹 LEFT(str, length): 왼쪽에서부터 자르기
문법
LEFT(문자열, 자를 길이)
예제
SELECT LEFT('2025-07-17', 4); -- 결과: '2025'
SELECT LEFT('홍길동입니다', 3); -- 결과: '홍길동'
- 주로 날짜에서 연도만 추출하거나, 코드의 앞자리 분류값을 추출할 때 사용된다.
- 한글도 글자 단위로 정확히 자른다. (UTF-8 기준)
실무 팁
-- 주민번호 앞자리만 추출
SELECT LEFT(ssn, 6) FROM users;
반응형
🔸 RIGHT(str, length): 오른쪽에서부터 자르기
문법
RIGHT(문자열, 자를 길이)
예제
SELECT RIGHT('2025-07-17', 2); -- 결과: '17'
SELECT RIGHT('홍길동입니다', 3); -- 결과: '입니다'
- 파일 확장자 추출, 전화번호 뒷자리 추출 등에 자주 사용된다.
실무 팁
-- 이메일 주소 도메인 추출
SELECT RIGHT(email, LENGTH(email) - INSTR(email, '@')) AS domain FROM users;
또는 아래처럼 SUBSTRING_INDEX()와 함께 쓰는 방식도 있다.
SELECT SUBSTRING_INDEX(email, '@', -1) AS domain FROM users;
🔻 SUBSTRING(str, start, length): 중간에서 잘라내기
문법
SUBSTRING(문자열, 시작위치 [, 자를 길이])
예제
SELECT SUBSTRING('abcdef', 2, 3); -- 결과: 'bcd'
SELECT SUBSTRING('홍길동입니다', 4, 3); -- 결과: '입니'
- 위치는 1부터 시작
- 길이 생략하면 끝까지 추출
음수 위치도 가능
SELECT SUBSTRING('abcdef', -3, 2); -- 결과: 'de'
실무 팁
-- 사번에서 부서코드 추출 (예: 'D2023HR01' → 'HR')
SELECT SUBSTRING(emp_no, 7, 2) FROM employee;
-- 문자열 마지막 글자 2개 추출
SELECT SUBSTRING(name, -2) FROM users;
반응형
🧠 요약 비교표
| 함수 | 추출 위치 | 예시 결과 | 특징 |
| LEFT | 왼쪽부터 | LEFT('abcde', 2) → 'ab' | 앞자리 추출 |
| RIGHT | 오른쪽부터 | RIGHT('abcde', 2) → 'de' | 뒷자리 추출 |
| SUBSTRING | 중간 또는 끝 위치 | SUBSTRING('abcde', 2, 2) → 'bc' | 유연한 위치 지정 가능 |
⚠️ 주의사항
- 문자열 길이를 넘는 값을 자르면, 넘치는 만큼 무시되고 가능한 범위만 추출됨
- 한글 처리도 정확히 되지만, 인코딩 설정이 UTF-8이 아닐 경우 글자 깨짐 주의
- SUBSTRING은 가장 유연하지만 위치 계산이 까다로울 수 있음
🔍 마무리 정리
- 간단한 앞/뒤 추출 → LEFT, RIGHT
- 중간 위치 또는 다양한 범위 조합 → SUBSTRING
- 문자열 위치 계산 시 INSTR(), LENGTH()와 조합하면 강력한 전처리 도구로 사용 가능
🔗 참고 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] 문자열 공백 제거 함수: TRIM, LTRIM, RTRIM 비교 (0) | 2025.07.19 |
|---|---|
| [MySQL] 문자열 패딩 함수: LPAD, RPAD 예제 중심 정리 (0) | 2025.07.19 |
| [MySQL] 문자열 치환 함수: REPLACE 실무 활용법 (1) | 2025.07.19 |
| [MySQL] 문자열 검색 함수: INSTR, LOCATE, POSITION 비교 (0) | 2025.07.19 |
| [MySQL] 문자열 연결 함수: CONCAT, CONCAT_WS 활용법 (0) | 2025.07.19 |
| [MySQL] 문자열 길이 함수: LENGTH vs CHAR_LENGTH 정리 (3) | 2025.07.19 |
| [MySQL] (연결최적화6️⃣) 실무 연결 설정 체크리스트 총정리 (1) | 2025.07.19 |
| [MySQL] (연결최적화5️⃣) 커넥션 누수 원인 진단과 해결 전략 (1) | 2025.07.18 |