MySQL SUBSTR() 함수로 파일 경로에서 부분 문자열 추출하기
MySQL에서 파일 위치(fileLocation)처럼 긴 문자열이 저장된 컬럼에서 원하는 구간만 잘라내고 싶을 때가 있습니다. 이럴 때 SUBSTR() 함수를 사용하면 간단하게 해결할 수 있습니다. 이 글에서는 파일 경로가 저장된 테이블을 만들고, SUBSTR() 함수를 활용해 여러 형태로 부분 문자열을 추출하는 방법을 예제와 함께 살펴보겠습니다.
SUBSTR() 기본 문법
SUBSTR() 함수는 두 가지 방식으로 사용할 수 있습니다.
SELECT SUBSTR(컬럼명, 시작인덱스, 길이) FROM 테이블명 LIMIT 값;
SELECT SUBSTR(컬럼명, 시작인덱스) FROM 테이블명 LIMIT 값;
첫 번째 형태는 시작 인덱스부터 지정한 길이만큼의 문자열을 반환하고, 두 번째 형태는 시작 인덱스부터 문자열 끝까지 전체를 반환합니다. MySQL에서 문자열 인덱스는 0이 아닌 1부터 시작한다는 점에 유의하세요.
1. 테이블 생성하기
먼저 파일 경로를 저장할 테이블을 생성합니다.
mysql> create table demo11
-> (
-> id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> fileLocation text
-> );
Query OK, 0 rows affected (2.60 sec)
id는 자동 증가(AUTO_INCREMENT) 기본키로 설정했고, 파일 경로는 TEXT 타입의 fileLocation 컬럼에 저장됩니다.
2. 샘플 데이터 삽입하기
INSERT 명령으로 몇 개의 파일 경로 레코드를 추가합니다.
mysql> insert into demo11(fileLocation) values('E:/users/program/sample.sql');
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo11(fileLocation) values('E:/users/data/db.sql');
Query OK, 1 row affected (0.32 sec)
mysql> insert into demo11(fileLocation) values('C:/users/data/sample2.sql');
Query OK, 1 row affected (0.13 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블에 저장된 전체 레코드를 조회해 보겠습니다.
mysql> select * from demo11;
실행 결과는 다음과 같습니다.
+----+-----------------------------+
| id | fileLocation |
+----+-----------------------------+
| 1 | E:/users/program/sample.sql |
| 2 | E:/users/data/db.sql |
| 3 | C:/users/data/sample2.sql |
+----+-----------------------------+
3 rows in set (0.00 sec)
4. SUBSTR()로 부분 문자열 나누어 추출하기
이제 SUBSTR() 함수를 사용해 파일 경로를 두 부분으로 나누어 출력해 보겠습니다. 먼저 LIMIT 절에 LIMIT 1, 2를 사용하면 첫 번째 행을 건너뛰고 그다음 두 행만 가져온다는 점을 기억해 두세요.
첫 번째 쿼리: 앞부분 15자 추출
mysql> select substr(fileLocation,1,15) from demo11 limit 1,2;
실행 결과는 다음과 같습니다.
+---------------------------+
| substr(fileLocation,1,15) |
+---------------------------+
| E:/users/data/d |
| C:/users/data/s |
+---------------------------+
2 rows in set (0.00 sec)
시작 인덱스 1부터 15글자까지, 즉 파일 경로의 앞부분이 잘려서 출력되었습니다.
두 번째 쿼리: 16번째 문자부터 끝까지 추출
mysql> select substr(fileLocation,16) from demo11 limit 1,2;
실행 결과는 다음과 같습니다.
+-------------------------+
| substr(fileLocation,16) |
+-------------------------+
| b.sql |
| ample2.sql |
+-------------------------+
2 rows in set (0.00 sec)
길이를 지정하지 않으면 시작 인덱스부터 문자열 끝까지 모두 반환됩니다. 이렇게 두 쿼리의 결과를 합치면 원래의 전체 파일 경로가 되므로, 하나의 긴 문자열을 여러 조각으로 나누어 처리할 수 있습니다.
정리
MySQL의 SUBSTR() 함수는 시작 인덱스와 길이(선택 사항)를 지정해 문자열의 특정 구간을 손쉽게 추출할 수 있는 강력한 도구입니다. 파일 경로, URL, 코드 값처럼 규칙적인 구조를 가진 문자열 데이터를 파싱할 때 특히 유용하며, LIMIT 절과 함께 사용하면 원하는 행 범위의 결과만 효율적으로 가져올 수 있습니다.