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

Đếm số lần xuất hiện chuỗi con trong cột MySQL với LENGTH và REPLACE

Công thức: (LENGTH(full) - LENGTH(REPLACE(full, substr, ''))) / LENGTH(substr). Đối với chuỗi phân cách bởi dấu phẩy, cần xử lý ranh giới.

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (Value TEXT);
Query OK, 0 rows affected (0.74 sec)
mysql> INSERT INTO DemoTable VALUES('10,20,10,30,10,40,50,40');
Query OK, 1 row affected (0.24 sec)

Truy vấn đếm xuất hiện của '10' (xử lý ranh giới bằng CONCAT)

mysql> SELECT (LENGTH(Value) + 2 - LENGTH(REPLACE(CONCAT(',', Value, ','), ',10,', 'len'))) FROM DemoTable;

Kết quả: 3 lần

+----------------------------------------------------------------------------+
| LENGTH(Value) + 2 - LENGTH(REPLACE(CONCAT(',', Value, ','), ',10,', 'len')) |
+----------------------------------------------------------------------------+
| 3                                                                          |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)

Giải thích kỹ thuật:

  • CONCAT(',', Value, ','): thêm dấu phẩy đầu/cuối → ',10,20,10,30,10,40,50,40,'
  • Tìm ',10,' thay vì '10' để tránh khớp '10' trong '110', '101'
  • REPLACE(..., ',10,', 'len'): thay ',10,' (3 ký tự) bằng 'len' (3 ký tự) → độ dài không đổi cho phần khớp
  • Thực tế công thức gốc có lỗi: nên dùng (LENGTH(CONCAT(',',Value,',')) - LENGTH(REPLACE(CONCAT(',',Value,','), ',10,', ''))) / 3