LEFT()와 SUBSTRING_INDEX()를 활용한 파일 경로 추출
파일 경로가 저장된 열에서 왼쪽 부분 문자열(디렉터리 경로)을 추출하려면 LEFT() 함수와 SUBSTRING_INDEX() 함수를 함께 사용하면 됩니다.
예를 들어 다음과 같은 파일 경로가 있다고 가정해 보겠습니다.
"/MyFile/JavaProgram/Hello.java"
여기서 우리가 원하는 결과는 파일명을 제외한 나머지 전체 경로입니다. 즉, 아래와 같은 출력을 얻는 것이 목표입니다.
/MyFile/JavaProgram/
이제 실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 테이블을 생성합니다.
mysql> create table DemoTable
(
FileLocation text
);
Query OK, 0 rows affected (0.57 sec)2단계: 데이터 삽입
INSERT 명령을 사용하여 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('/MyFile/JavaProgram/Hello.java');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('/C/AllPrograms/animation.gif');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('/E/FavFile/ChatProgram.java');
Query OK, 1 row affected (0.18 sec)3단계: 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------------------------+ | FileLocation | +--------------------------------+ | /MyFile/JavaProgram/Hello.java | | /C/AllPrograms/animation.gif | | /E/FavFile/ChatProgram.java | +--------------------------------+ 3 rows in set (0.00 sec)
4단계: 파일명을 제외한 경로 추출 쿼리 실행
다음은 MySQL에서 왼쪽 부분 문자열(디렉터리 경로)을 가져오는 쿼리입니다.
mysql> select left(FileLocation,char_length(FileLocation)-char_length(substring_index(FileLocation,'/',-1))) from DemoTable;
쿼리 동작 원리
이 쿼리의 핵심 로직은 다음과 같습니다.
SUBSTRING_INDEX(FileLocation, '/', -1) — 마지막 슬래시(/) 뒤에 있는 문자열, 즉 파일명만 추출합니다.
CHAR_LENGTH() — 전체 경로 길이에서 파일명 길이를 빼면 순수하게 디렉터리 경로의 길이가 계산됩니다.
LEFT() — 계산된 길이만큼 왼쪽부터 문자열을 잘라내어 파일명을 제외한 전체 경로를 반환합니다.
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------------------------------------------------------------------------------------------------+ | left(FileLocation,char_length(FileLocation)-char_length(substring_index(FileLocation,'/',-1))) | +------------------------------------------------------------------------------------------------+ | /MyFile/JavaProgram/ | | /C/AllPrograms/ | | /E/FavFile/ | +------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)
결과를 보면 각 행에서 파일명이 제거되고 디렉터리 경로만 깔끔하게 표시된 것을 확인할 수 있습니다. 이 방법은 확장자나 파일명 길이와 관계없이 어떤 파일 경로에도 동일하게 적용할 수 있어 매우 유용합니다.