MySQL에서 문자열 필드의 마지막 몇 글자를 잘라내야 하는 경우가 종종 있습니다. 예를 들어 STU-090처럼 접미사가 붙은 학생 ID에서 뒤의 숫자 부분을 제거하고 싶을 수 있죠. 이번 글에서는 REVERSE()와 SUBSTR() 함수를 조합하여 필드의 마지막 3자를 손쉽게 버리는 방법을 알아보겠습니다.
1. 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> StudentId varchar(100)
-> );
Query OK, 0 rows affected (0.58 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('STU-090');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('STU-123');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('STU-678');
Query OK, 1 row affected (0.29 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-----------+ | StudentId | +-----------+ | STU-090 | | STU-123 | | STU-678 | +-----------+ 3 rows in set (0.00 sec)
4. 마지막 3자를 제거하는 쿼리
필드의 마지막 3자를 버리려면 아래와 같은 쿼리를 사용하면 됩니다.
mysql> SELECT REVERSE(SUBSTR(REVERSE(StudentId), 4)) from DemoTable
이 쿼리의 동작 원리는 다음과 같습니다.
① REVERSE(StudentId) — 문자열을 거꾸로 뒤집습니다. 예: STU-090 → 090-UTS
② SUBSTR(..., 4) — 뒤집힌 문자열에서 4번째 문자부터 끝까지 추출합니다. 즉, 원래 문자열의 마지막 3자가 잘려나갑니다.
③ REVERSE(...) — 다시 원래 방향으로 되돌려 최종 결과를 얻습니다.
실행 결과는 다음과 같습니다.
+----------------------------------------+ | REVERSE(SUBSTR(REVERSE(StudentId), 4)) | +----------------------------------------+ | STU- | | STU- | | STU- | +----------------------------------------+ 3 rows in set (0.00 sec)
참고: 더 간단한 대안
사실 MySQL 5.x 이상에서는 LEFT() 함수와 CHAR_LENGTH()를 조합하면 더 직관적으로 처리할 수도 있습니다.
mysql> SELECT LEFT(StudentId, CHAR_LENGTH(StudentId) - 3) FROM DemoTable;
두 방법 모두 동일한 결과를 반환하지만, LEFT + CHAR_LENGTH 조합이 의도를 더 명확하게 드러내므로 가독성 면에서 권장됩니다. 다만 다중 바이트 문자(한글 등)를 다룰 때는 CHAR_LENGTH 대신 문자 단위 길이 계산에 주의해야 합니다.