สร้าง Function แบบกำหนดเอง (Stored Function) ใช้ WHILE ลูป REPLACE() จนกว่าจะไม่มีช่องว่างซ้ำ
ไวยากรณ์สร้าง Function
DELIMITER //
CREATE FUNCTION yourFunctionName(param VARCHAR(200)) RETURNS VARCHAR(200)
BEGIN
SET param = TRIM(param);
WHILE INSTR(param, ' ') > 0 DO
SET param = REPLACE(param, ' ', ' ');
END WHILE;
RETURN param;
END //
DELIMITER ;
ตัวอย่างสร้าง Function function_DeleteSpaces
mysql> DELIMITER //
mysql> CREATE FUNCTION function_DeleteSpaces(value VARCHAR(200)) RETURNS VARCHAR(200)
-> BEGIN
-> SET value = TRIM(value);
-> WHILE INSTR(value, ' ') > 0 DO
-> SET value = REPLACE(value, ' ', ' ');
-> END WHILE;
-> RETURN value;
-> END //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;
ทดสอบ Function
mysql> SELECT function_DeleteSpaces(' John Smith ');
+--------------------------------------------------+
| function_DeleteSpaces(' John Smith ') |
+--------------------------------------------------+
| John Smith |
+--------------------------------------------------+
ทดสอบอีกตัวอย่าง
mysql> SELECT function_DeleteSpaces(' John Smith 123 ');
+---------------------------------------------------------+
| function_DeleteSpaces(' John Smith 123 ') |
+---------------------------------------------------------+
| John Smith 123 |
+---------------------------------------------------------+
คำอธิบาย: TRIM() ตัดช่องว่างหน้า/หลัง, WHILE ลูป REPLACE(' ', ' ') จนไม่มีช่องว่าง 2 ช่องติดกัน
หมายเหตุ: MySQL 8.0+ มี REGEXP_REPLACE() ทำได้ง่ายกว่า: REGEXP_REPLACE(str, ' {2,}', ' ')