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

MySQL: Tìm kiếm văn bản giữa các dấu phân cách (delimiter)

Để trích xuất văn bản giữa các dấu phân cách, bạn cần kết hợp hàm LOCATE() và SUBSTR() (hoặc SUBSTRING()).

Cú pháp chung

SELECT SUBSTR(cot_cua_ban, LOCATE(':', cot_cua_ban) + 1, 
       (CHAR_LENGTH(cot_cua_ban) - LOCATE(':', REVERSE(cot_cua_ban)) - LOCATE(':', cot_cua_ban))) AS ten_biet_danh
FROM ten_bang_cua_ban;

Trong ví dụ này, dấu phân cách là hai chấm (:), bạn có thể thay bằng ký tự khác.

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE TimKiemGiuaDauPhanCach (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> TuKhoa LONGTEXT,
    -> PRIMARY KEY(Id)
    -> );

Chèn dữ liệu:

mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('Object:Oriented:Programming');
mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('C++:Java:C#');
mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('SQLServer:MySQL:Oracle');
mysql> INSERT INTO TimKiemGiuaDauPhanCach(TuKhoa) VALUES('SQL SQLServer:MySQL:Oracle');

Hiển thị dữ liệu gốc:

+----+-----------------------------+
| Id | TuKhoa                      |
+----+-----------------------------+
|  1 | Object:Oriented:Programming |
|  2 | C++:Java:C#                 |
|  3 | SQLServer:MySQL:Oracle      |
|  4 | SQL SQLServer:MySQL:Oracle  |
+----+-----------------------------+

Truy vấn trích xuất văn bản giữa các dấu phân cách

mysql> SELECT 
    -> SUBSTR(TuKhoa, 
    -> LOCATE(':', TuKhoa) + 1, 
    -> (CHAR_LENGTH(TuKhoa) - LOCATE(':', REVERSE(TuKhoa)) - LOCATE(':', TuKhoa))) AS VanBan
    -> FROM TimKiemGiuaDauPhanCach;

Kết quả (lấy phần giữa dấu hai chấm đầu tiên và cuối cùng):

+----------+
| VanBan   |
+----------+
| Oriented |
| Java     |
| MySQL    |
| MySQL    |
+----------+

Giải thích: Công thức tính độ dài chuỗi con: độ dài toàn bộ chuỗi trừ vị trí dấu phân cách cuối cùng (được tìm bằng REVERSE) trừ vị trí dấu phân cách đầu tiên.