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

Xóa văn bản giữa dấu ngoặc vuông trong MySQL

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ên
  • locate(']', 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óa
  • replace(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.