MySQL ไม่มีฟังก์ชัน Built-in สำหรับลบอักขระที่ไม่ใช่ตัวอักษร/ตัวเลข (Non-alphanumeric) เช่น @, !, #, &, (, ), ?, / จึงต้องสร้าง User-Defined Function เอง
สร้าง Function RemoveNonAlphaNumeric
mysql> DELIMITER //
mysql> CREATE FUNCTION RemoveNonAlphaNumeric(s CHAR(255))
-> RETURNS CHAR(255) DETERMINISTIC
-> BEGIN
-> DECLARE var1, length SMALLINT DEFAULT 1;
-> DECLARE result CHAR(255) DEFAULT '';
-> DECLARE ch CHAR(1);
-> SET length = CHAR_LENGTH(s);
-> REPEAT
-> BEGIN
-> SET ch = MID(s, var1, 1);
-> IF ch REGEXP '[[:alnum:]]' THEN
-> SET result = CONCAT(result, ch);
-> END IF;
-> SET var1 = var1 + 1;
-> END;
-> UNTIL var1 > length END REPEAT;
-> RETURN result;
-> END //
Query OK, 0 rows affected (0.10 sec)
ทดสอบ Function
mysql> DELIMITER ;
mysql> SELECT 'My Email id is test@123!', RemoveNonAlphaNumeric('My Email id is test@123!');
ผลลัพธ์:
+--------------------------+---------------------------------------------------+
| My Email id is test@123! | removeNonAlphaNumeric('My Email id is test@123!') |
+--------------------------+---------------------------------------------------+
| My Email id is test@123! | MyEmailidistest123 |
+--------------------------+---------------------------------------------------+
อักขระ @ และ ! ถูกลบออกแล้ว เหลือเฉพาะตัวอักษรและตัวเลข
หมายเหตุ: Function นี้ทำงานแบบ Loop ตัวอักษรทีละตัว อาจช้าเมื่อใช้กับข้อมูลปริมาณมาก ควรพิจารณาใช้ REGEXP_REPLACE() ใน MySQL 8.0+ แทน