Để trích xuất phần đường dẫn thư mục (bỏ tên file) từ chuỗi đường dẫn đầy đủ, dùng LEFT() kết hợp CHAR_LENGTH() và SUBSTRING_INDEX().
Ví dụ minh họa
Đường dẫn mẫu: /MyFile/JavaProgram/Hello.java → Cần lấy: /MyFile/JavaProgram/
Tạo bảng:
mysql> create table DemoTable (
FileLocation text
);
Chèn dữ liệu:
mysql> insert into DemoTable values('/MyFile/JavaProgram/Hello.java');
mysql> insert into DemoTable values('/C/AllPrograms/animation.gif');
mysql> insert into DemoTable values('/E/FavFile/ChatProgram.java');
Hiển thị dữ liệu:
mysql> select * from DemoTable;
Kết quả:
+--------------------------------+ | FileLocation | +--------------------------------+ | /MyFile/JavaProgram/Hello.java | | /C/AllPrograms/animation.gif | | /E/FavFile/ChatProgram.java | +--------------------------------+
Truy vấn lấy phần thư mục (bỏ tên file)
mysql> select left(FileLocation,
char_length(FileLocation) - char_length(substring_index(FileLocation,'/','-1')))
from DemoTable;
Kết quả:
+------------------------------------------------------------------------------------------------+ | left(FileLocation,char_length(FileLocation)-char_length(substring_index(FileLocation,'/','-1'))) | +------------------------------------------------------------------------------------------------+ | /MyFile/JavaProgram/ | | /C/AllPrograms/ | | /E/FavFile/ | +------------------------------------------------------------------------------------------------+
Giải thích logic:
SUBSTRING_INDEX(FileLocation, '/', -1): Lấy phần sau dấu '/' cuối cùng (tên file: Hello.java, animation.gif, ChatProgram.java)CHAR_LENGTH(...): Độ dài tên fileCHAR_LENGTH(FileLocation) - ...: Độ dài phần đường dẫn thư mụcLEFT(FileLocation, độ_dài_thư_mục): Cắt lấy phần trái = đường dẫn thư mục
Cách đơn giản hơn (MySQL 8.0+): SUBSTRING_INDEX(FileLocation, '/', LENGTH(FileLocation) - LENGTH(REPLACE(FileLocation, '/', ''))) hoặc dùng REGEXP_REPLACE (MySQL 8.0.4+).