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

MySQL에서 PHP basename() 함수처럼 파일 이름 추출하기

PHP의 basename() 함수는 파일 경로가 포함된 문자열을 입력받으면 해당 파일의 기본 이름(base name)만 반환하는 함수입니다. 그렇다면 MySQL에서도 이와 동일한 기능을 사용할 수 있을까요? 정답은 SUBSTRING_INDEX() 함수를 활용하면 가능하다는 것입니다.

예제 테이블 생성하기

먼저 실습에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
   -> (
   -> Location varchar(200)
   -> );
Query OK, 0 rows affected (1.02 sec)

데이터 삽입하기

INSERT 명령어를 사용하여 파일 경로 데이터를 몇 개 삽입합니다.

mysql> insert into DemoTable values('C:\Web\Sum.java');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable values('E:\WebDevelopment\Image1.png');
Query OK, 1 row affected (0.42 sec)

저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

출력 결과

+------------------------------+
| Location                     |
+------------------------------+
| C:\Web\Sum.java              |
| E:\WebDevelopment\Image1.png |
+------------------------------+
2 rows in set (0.00 sec)

SUBSTRING_INDEX()로 파일 이름만 추출하기

이제 MySQL에서 basename() 함수와 동일한 결과, 즉 파일의 기본 이름을 얻는 쿼리를 살펴보겠습니다. 핵심은 SUBSTRING_INDEX() 함수를 경로 구분자인 역슬래시(\\)와 함께 사용하고, 세 번째 인자로 -1을 지정하여 마지막 구분자 뒤의 문자열을 가져오는 것입니다.

mysql> select Location,
   -> SUBSTRING_INDEX(Location,'\\', -1) AS NameOfFile from DemoTable;

출력 결과

+------------------------------+------------+
| Location                     | NameOfFile |
+------------------------------+------------+
| C:\Web\Sum.java              | Sum.java   |
| E:\WebDevelopment\Image1.png | Image1.png |
+------------------------------+------------+
2 rows in set (0.00 sec)

동작 원리

SUBSTRING_INDEX(str, delim, count) 함수는 count 값에 따라 다르게 동작합니다. count가 음수이면 문자열 끝에서부터 지정한 구분자의 개수를 세고, 마지막 구분자 오른쪽에 있는 부분 문자열을 반환합니다. 따라서 -1을 사용하면 경로 전체에서 가장 마지막 요소인 파일 이름만 깔끔하게 추출할 수 있습니다. 만약 유닉스 계열 경로처럼 슬래시(/)를 구분자로 사용한다면 SUBSTRING_INDEX(Location, '/', -1) 형태로 변경하면 됩니다.