Giới thiệu
Bài viết minh họa cách loại bỏ chuỗi con nằm giữa cặp dấu ngoặc vuông [...] bằng các hàm chuỗi MySQL: REPLACE, SUBSTRING, LOCATE, LENGTH, REVERSE.
1. Tạo bảng và dữ liệu
mysql> create table DemoTable (
-> Name text
-> );
Query OK, 0 rows affected (0.47 sec)
mysql> insert into DemoTable values('John [John] Smith');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable values('[Carol] Carol Taylor');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David [Miller] Miller');
Query OK, 1 row affected (0.14 sec)
2. Dữ liệu gốc
mysql> select *from DemoTable;
+-----------------------+ | Name | +-----------------------+ | John [John] Smith | | [Carol] Carol Taylor | | David [Miller] Miller | +-----------------------+ 3 rows in set (0.00 sec)
3. Truy vấn xóa text trong ngoặc vuông
mysql> select replace(Name,
-> substring(Name, locate('[', Name),
-> LENGTH(Name) - locate(']', reverse(Name)) - locate('[', Name) + 2),
-> '') as Name
-> from DemoTable;
Phân tích công thức:
locate('[', Name): Vị trí dấu '[' đầu tiênlocate(']', reverse(Name)): Vị trí dấu ']' từ cuối chuỗi (đảo ngược)LENGTH(Name) - ... - locate('[', Name) + 2: Độ dài chuỗi con từ '[' đến ']'substring(...): Trích xuất chuỗi con cần xóareplace(Name, ..., ''): Thay thế chuỗi con đó bằng rỗng
4. Kết quả
+---------------+ | Name | +---------------+ | John Smith | | Carol Taylor | | David Miller | +---------------+ 3 rows in set (0.03 sec)
Lưu ý: Cách này chỉ xóa cặp ngoặc vuông đầu tiên tìm thấy. Với nhiều cặp ngoặc lồng nhau, cần dùng REGEXP hoặc xử lý ứng dụng.