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

Đếm số dấu phẩy trong cột giá trị phân cách bằng dấu phẩy MySQL

Khi cột lưu chuỗi các giá trị phân cách bằng dấu phẩy (CSV), để đếm số phần tử, ta có thể đếm số dấu phẩy và cộng 1. MySQL không có hàm đếm ký tự trực tiếp, nhưng dùng công thức: LENGTH(chuỗi) - LENGTH(REPLACE(chuỗi, ',', '')).

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE DemoTable1510 (
    Value VARCHAR(50)
);

Chèn dữ liệu CSV:

mysql> INSERT INTO DemoTable1510 VALUES ('20,35');
mysql> INSERT INTO DemoTable1510 VALUES ('45,67,89');
mysql> INSERT INTO DemoTable1510 VALUES ('90,97,101,190');

Dữ liệu:

mysql> SELECT * FROM DemoTable1510;
+---------------+
| Value         |
+---------------+
| 20,35         |
| 45,67,89      |
| 90,97,101,190 |
+---------------+

Đếm số dấu phẩy

mysql> SELECT 
    LENGTH(Value) - LENGTH(REPLACE(Value, ',', '')) AS NumberOfComma
    FROM DemoTable1510;

Kết quả:

+---------------+
| NumberOfComma |
+---------------+
|             1 |
|             2 |
|             3 |
+---------------+

Giải thích công thức

  • LENGTH(Value): Độ dài chuỗi gốc (kể cả dấu phẩy).
  • REPLACE(Value, ',', ''): Chuỗi sau khi xóa tất cả dấu phẩy.
  • LENGTH(REPLACE(...)): Độ dài chuỗi không dấu phẩy.
  • Hiệu số = số dấu phẩy.

Đếm số phần tử thực tế

Số phần tử = Số dấu phẩy + 1 (trừ khi chuỗi rỗng):

SELECT 
    Value,
    LENGTH(Value) - LENGTH(REPLACE(Value, ',', '')) + 1 AS ElementCount
FROM DemoTable1510;

Lưu ý quan trọng

  • Cách này chỉ đúng nếu dữ liệu đảm bảo định dạng CSV chuẩn (không dấu phẩy ở đầu/cuối, không dấu phẩy kép).
  • Nên chuẩn hóa dữ liệu: tách thành bảng liên quan (normalization) thay vì lưu CSV trong một cột.
  • MySQL 8.0+ có JSON_TABLE() để parse JSON array hiệu quả hơn lưu CSV.