คำอธิบาย
ใช้ REPLACE() ซ้อนหลายชั้น (Nested) เพื่อลบอักขระที่ไม่ต้องการ ( -, ช่องว่าง, คอมมา, อัญประกาศ ) ทิ้งเหลือเฉพาะตัวเลข
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
Number text );
Query OK, 0 rows affected (0.49 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values('7364746464,-');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('-,8909094556');
Query OK, 1 row affected (0.23 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์:
+--------------+ | Number | +--------------+ | 7364746464,- | | -,8909094556 | +--------------+ 2 rows in set (0.00 sec)
คิวรี่ดึงเฉพาะตัวเลข
mysql> select replace(replace(replace(replace(Number, '-', ''), ' ', ''), '"', ''), ',', '') as Result from DemoTable;
ผลลัพธ์
+------------+ | Result | +------------+ | 7364746464 | | 8909094556 | +------------+ 2 rows in set (0.00 sec)
คำอธิบายการทำงาน
ทำงานจากในออกมา (Innermost First):
REPLACE(Number, '-', ''): ลบ -REPLACE(..., ' ', ''): ลบช่องว่างREPLACE(..., '"', ''): ลบอัญประกาศREPLACE(..., ',', ''): ลบคอมมา
วิธีที่ดีกว่า: REGEXP_REPLACE (MySQL 8.0+)
SELECT REGEXP_REPLACE(Number, '[^0-9]', '') as Result FROM DemoTable;
ลบอักขระที่ ไม่ใช่ 0-9 ทั้งหมดในครั้งเดียว
MySQL ก่อน 8.0: User Defined Function
สร้าง Function แปลงให้เหลือตัวเลข (ต้องมีสิทธิ์ CREATE ROUTINE)