Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 디렉토리 경로 열의 마지막 '/' 뒤 문자열을 교체하는 쿼리 작성 방법

파일 시스템 경로처럼 슬래시(/)가 포함된 문자열을 저장하는 열에서, 마지막 '/' 뒤에 있는 부분만 다른 값으로 교체해야 하는 경우가 종종 있습니다. 예를 들어 폴더 이름이 변경되었을 때 전체 경로 중 마지막 세그먼트만 갱신하고 싶다면, 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() 함수를 함께 사용하면 복잡한 문자열 처리 로직 없이도 경로의 마지막 세그먼트를 깔끔하게 교체할 수 있습니다.