Sử dụng hàm LOCATE() và SUBSTRING() trong MySQL để đạt được điều này.
Tạo bảng demo
mysql> create table DemoTable (
-> Title text
-> );
Query OK, 0 rows affected (0.54 sec)
Chèn dữ liệu mẫu
mysql> insert into DemoTable values('Introduction To Java');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Introduction - To MySQL');
Query OK, 1 row affected (0.16 sec)
Hiển thị tất cả bản ghi
mysql> select * from DemoTable;
Kết quả
+-------------------------+ | Title | +-------------------------+ | Introduction To Java | | Introduction - To MySQL | +-------------------------+ 2 rows in set (0.00 sec)
Truy vấn lấy chuỗi con trước ký tự đặc biệt ' - '
mysql> select distinct
-> if(LOCATE(' - ', Title) > 0,
-> SUBSTRING(Title, 1, LOCATE(' - ', Title)),
-> Title)
-> from DemoTable;
Kết quả
+-----------------------------------------------------------------------------+
| if(LOCATE(' - ',Title)>0, SUBSTRING(Title, 1, LOCATE(' - ', Title)), Title) |
+-----------------------------------------------------------------------------+
| Introduction To Java |
| Introduction |
+-----------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Giải thích:
LOCATE(' - ', Title): Tìm vị trí của chuỗi ' - ' trong Title. Trả về 0 nếu không tìm thấy.SUBSTRING(Title, 1, LOCATE(' - ', Title)): Lấy chuỗi con từ vị trí 1 đến vị trí tìm thấy.IF(condition, true_value, false_value): Nếu tìm thấy ' - ' thì lấy phần trước, ngược lại lấy nguyên chuỗi.
Lưu ý: Hàm SUBSTRING_INDEX() cũng có thể dùng cho trường hợp đơn giản hơn: SUBSTRING_INDEX(Title, ' - ', 1).