MySQL에서 경로에서 파일 이름 추출하기
MySQL에서 전체 파일 경로가 저장된 컬럼으로부터 파일 이름(파일명)만 추출하고 싶다면 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수는 구분자를 기준으로 문자열을 나눈 뒤, 지정한 위치의 부분 문자열을 반환합니다.
기본 문법은 다음과 같습니다.
SELECT SUBSTRING_INDEX(컬럼명, '\\', -1) AS 별칭 FROM 테이블명;
여기서 세 번째 인자인 -1은 구분자(역슬래시)를 기준으로 잘랐을 때 마지막 조각, 즉 파일 이름을 의미합니다.
예제 테이블 생성
문법을 실제로 이해하기 위해 예제용 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 테이블을 생성할 수 있습니다.
mysql> create table ExtractFileNameDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> AllProgrammingFilePath varchar(100) -> ); Query OK, 0 rows affected (0.50 sec)
샘플 데이터 삽입
이제 INSERT 명령을 사용해 몇 개의 파일 경로 레코드를 삽입해 보겠습니다.
mysql> insert into ExtractFileNameDemo(AllProgrammingFilePath) values('C:\\Users\\John\\AddTwoNumberProgram.java');
Query OK, 1 row affected (0.13 sec)
mysql> insert into ExtractFileNameDemo(AllProgrammingFilePath) values('E:\\CProgram\\MasterMindGame.c');
Query OK, 1 row affected (0.23 sec)
mysql> insert into ExtractFileNameDemo(AllProgrammingFilePath) values('F:\\WebApplication\\WebApp.php');
Query OK, 1 row affected (0.19 sec)
mysql> insert into ExtractFileNameDemo(AllProgrammingFilePath) values('C:\\Users\\John\\Desktop\\AllMySQLScript.sql');
Query OK, 1 row affected (0.15 sec)저장된 데이터 확인
SELECT 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from ExtractFileNameDemo;
실행 결과는 다음과 같습니다.
+----+------------------------------------------+ | Id | AllProgrammingFilePath | +----+------------------------------------------+ | 1 | C:\Users\John\AddTwoNumberProgram.java | | 2 | E:\CProgram\MasterMindGame.c | | 3 | F:\WebApplication\WebApp.php | | 4 | C:\Users\John\Desktop\AllMySQLScript.sql | +----+------------------------------------------+ 4 rows in set (0.00 sec)
파일 이름 추출 쿼리 실행
아래는 MySQL에서 경로로부터 파일 이름만 추출하는 실제 쿼리입니다.
mysql> select SUBSTRING_INDEX(AllProgrammingFilePath, '\\', -1) as AllFileName from ExtractFileNameDemo;
실행 결과는 다음과 같습니다.
+--------------------------+ | AllFileName | +--------------------------+ | AddTwoNumberProgram.java | | MasterMindGame.c | | WebApp.php | | AllMySQLScript.sql | +--------------------------+ 4 rows in set (0.00 sec)
추가 팁: 리눅스/유닉스 경로 처리
위 예제는 Windows 스타일의 역슬래시(\) 구분자를 사용한 경우입니다. 만약 /home/user/file.txt처럼 슬래시(/)로 구분된 리눅스·유닉스 경로라면 구분자만 변경하면 됩니다.
SELECT SUBSTRING_INDEX(파일경로컬럼, '/', -1) AS 파일명 FROM 테이블명;
또한 반대로 디렉터리 경로(파일 이름을 제외한 상위 경로)만 필요하다면 인덱스 값을 -1 대신 1로 지정하면 첫 번째 조각을 얻을 수 있고, 중간 경로가 필요하면 음수와 양수 값을 조합하여 활용할 수 있습니다.