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

Xóa tất cả ký tự sau dấu phẩy cuối cùng trong chuỗi MySQL

Để xóa phần chuỗi sau dấu phẩy cuối cùng (giữ lại phần trước dấu phẩy cuối), bạn dùng hàm SUBSTRING_INDEX() kết hợp tính toán vị trí dấu phẩy cuối bằng LENGTH() và REPLACE().

Cú pháp

UPDATE ten_bang 
SET ten_cot = SUBSTRING_INDEX(ten_cot, ',', 
    LENGTH(ten_cot) - LENGTH(REPLACE(ten_cot, ',', '')));

Giải thích logic

  • LENGTH(ten_cot) - LENGTH(REPLACE(ten_cot, ',', '')) = số lượng dấu phẩy trong chuỗi
  • SUBSTRING_INDEX(str, ',', n) trả về phần chuỗi trước dấu phẩy thứ n
  • Kết hợp: Lấy phần trước dấu phẩy cuối cùng (thứ n = tổng số dấu phẩy)

Ví dụ minh họa

1. Tạo bảng

CREATE TABLE RemoveAllCharacters (
    Id INT NOT NULL AUTO_INCREMENT,
    FullInfo VARCHAR(200),
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu

INSERT INTO RemoveAllCharacters(FullInfo) VALUES
('John,Smith,23,98,4565886'),
('Carol,Taylor,26,91'),
('David,Miller,21'),
('Robert,Jones,22,97'),
('Sam,Williams,27,88,456788,97877');

3. Xem dữ liệu gốc

SELECT * FROM RemoveAllCharacters;

Kết quả:

+----+---------------------------------+
| Id | FullInfo                        |
+----+---------------------------------+
| 1  | John,Smith,23,98,4565886        |
| 2  | Carol,Taylor,26,91              |
| 3  | David,Miller,21                 |
| 4  | Robert,Jones,22,97              |
| 5  | Sam,Williams,27,88,456788,97877 |
+----+---------------------------------+

4. Cập nhật: Xóa sau dấu phẩy cuối

UPDATE RemoveAllCharacters 
SET FullInfo = SUBSTRING_INDEX(FullInfo, ',', 
    LENGTH(FullInfo) - LENGTH(REPLACE(FullInfo, ',', '')));

5. Kết quả sau cập nhật

SELECT * FROM RemoveAllCharacters;

Kết quả:

+----+---------------------------+
| Id | FullInfo                  |
+----+---------------------------+
| 1  | John,Smith,23,98          |
| 2  | Carol,Taylor,26           |
| 3  | David,Miller              |
| 4  | Robert,Jones,22           |
| 5  | Sam,Williams,27,88,456788 |
+----+---------------------------+

Cách thay thế: Chỉ SELECT không UPDATE

SELECT Id, 
    SUBSTRING_INDEX(FullInfo, ',', 
        LENGTH(FullInfo) - LENGTH(REPLACE(FullInfo, ',', ''))) AS TrimmedInfo
FROM RemoveAllCharacters;

Lưu ý

  • Nếu chuỗi không có dấu phẩy, công thức trả về chuỗi gốc (vì số dấu phẩy = 0, SUBSTRING_INDEX với count=0 trả về chuỗi rỗng - cần xử lý riêng)
  • Cải tiến an toàn: CASE WHEN INSTR(ten_cot, ',') > 0 THEN ... ELSE ten_cot END
  • MySQL 8.0+ có thể dùng REGEXP_REPLACE (nếu bật): REGEXP_REPLACE(ten_cot, ',[^,]*$', '')