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

Xóa khoảng trắng thừa (2 trở lên) trong chuỗi MySQL

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:

  1. TRIM() xóa khoảng trắng đầu/cuối.
  2. Vòng lặp WHILE INSTR(...) > 0 lặp lại REPLACE(' ', ' ') 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.