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

MySQL에서 파일 경로로부터 파일명만 추출하는 방법 – SUBSTRING_INDEX() 활용 가이드

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로 지정하면 첫 번째 조각을 얻을 수 있고, 중간 경로가 필요하면 음수와 양수 값을 조합하여 활용할 수 있습니다.