Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีลบอักขระ Non-Alphanumeric ออกจาก String ใน MySQL

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+ แทน