DB

[MySQL] 문자열 추출 함수: LEFT, RIGHT, SUBSTRING 정리

인생아 2025. 7. 19. 11:01
반응형

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

 

반응형