파일 시스템 경로처럼 슬래시(/)가 포함된 문자열을 저장하는 열에서, 마지막 '/' 뒤에 있는 부분만 다른 값으로 교체해야 하는 경우가 종종 있습니다. 예를 들어 폴더 이름이 변경되었을 때 전체 경로 중 마지막 세그먼트만 갱신하고 싶다면, MySQL의 SUBSTRING_INDEX() 함수와 CONCAT() 함수를 조합하면 손쉽게 처리할 수 있습니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> FolderName varchar(100),
-> FolderLocation varchar(200)
-> );
Query OK, 0 rows affected (1.03 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테스트용 레코드를 몇 개 추가합니다.
mysql> insert into DemoTable values('CProgram','C:/AllPrograms/.....');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Images','E:/MyImage/home/garbage');
Query OK, 1 row affected (0.15 sec)3. 현재 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+------------+-------------------------+
| FolderName | FolderLocation |
+------------+-------------------------+
| CProgram | C:/AllPrograms/..... |
| Images | E:/MyImage/home/garbage |
+------------+-------------------------+
2 rows in set (0.00 sec)
4. 마지막 '/' 뒤의 문자열을 교체하는 UPDATE 쿼리
핵심은 SUBSTRING_INDEX(문자열, '/', -1)입니다. 구분자를 -1로 지정하면 마지막 '/' 기준으로 오른쪽에 있는 문자열을 반환합니다. 이 길이를 원본 문자열 길이에서 빼면 '마지막 '/'까지의 경로'가 남고, 여기에 새로운 폴더명을 이어 붙이는 방식입니다.
mysql> UPDATE DemoTable SET FolderLocation = CONCAT(LEFT(FolderLocation , CHAR_LENGTH(FolderLocation ) - CHAR_LENGTH(SUBSTRING_INDEX(FolderLocation , '/', -1))),FolderName);
Query OK, 2 rows affected (0.16 sec)
Rows matched: 2 Changed: 2 Warnings: 0
쿼리 동작 원리
SUBSTRING_INDEX(FolderLocation, '/', -1): 마지막 '/' 뒤의 문자열(예: 'garbage')을 추출합니다.CHAR_LENGTH(...): 해당 문자열의 길이를 계산합니다.LEFT(FolderLocation, 전체길이 - 추출문자열길이): 마지막 '/'까지의 경로 앞부분만 남깁니다.CONCAT(...): 잘라낸 경로 뒤에 FolderName 값을 연결하여 최종 경로를 만듭니다.
5. 변경 결과 확인하기
업데이트 후 테이블을 다시 조회하면, 각 행의 경로 끝부분이 FolderName 값으로 교체된 것을 확인할 수 있습니다.
mysql> select *from DemoTable;
출력 결과
+------------+-------------------------+
| FolderName | FolderLocation |
+------------+-------------------------+
| CProgram | C:/AllPrograms/CProgram |
| Images | E:/MyImage/home/Images |
+------------+-------------------------+
2 rows in set (0.00 sec)
이처럼 SUBSTRING_INDEX(), LEFT(), CONCAT() 함수를 함께 사용하면 복잡한 문자열 처리 로직 없이도 경로의 마지막 세그먼트를 깔끔하게 교체할 수 있습니다.