MySQL không có hàm built-in nén nhiều khoảng trắng thành 1. Tạo stored function lặp REPLACE cho đến khi không còn cặp khoảng trắng kép.
Tạo function function_DeleteSpaces
DELIMITER //
CREATE FUNCTION function_DeleteSpaces(input_str VARCHAR(200))
RETURNS VARCHAR(200)
DETERMINISTIC
BEGIN
DECLARE result_str VARCHAR(200);
SET result_str = TRIM(input_str);
WHILE INSTR(result_str, ' ') > 0 DO
SET result_str = REPLACE(result_str, ' ', ' ');
END WHILE;
RETURN result_str;
END //
DELIMITER ;
Sử dụng
SELECT function_DeleteSpaces(' John Smith ');
+--------------------------------------------------+
| function_DeleteSpaces(' John Smith ') |
+--------------------------------------------------+
| John Smith |
+--------------------------------------------------+
SELECT function_DeleteSpaces(' John Smith 123 ');
+---------------------------------------------------------+
| function_DeleteSpaces(' John Smith 123 ') |
+---------------------------------------------------------+
| John Smith 123 |
+---------------------------------------------------------+
Giải thích:
TRIM()xóa khoảng trắng đầu/cuối.- Vòng lặp
WHILE INSTR(...) > 0lặp lạiREPLACE(' ', ' ')cho đến khi không còn 2 khoảng trắng liên tiếp.
Lưu ý: Function này chỉ xử lý space (U+0020). Không xử lý tab, newline. Cần mở rộng nếu dữ liệu có nhiều loại whitespace.
MySQL 8.0+: Có thể dùng REGEXP_REPLACE(str, '[[:space:]]+', ' ') (nếu cài đặt ICU) hoặc viết UDF.