Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy substring bên trái (đường dẫn thư mục) từ cột file path trong MySQL

Để 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 file
  • CHAR_LENGTH(FileLocation) - ...: Độ dài phần đường dẫn thư mục
  • LEFT(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+).