Để 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ỗiSUBSTRING_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, ',[^,]*$', '')