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

MySQL: ดึงเฉพาะตัวเลขจาก Text Field ด้วย REPLACE ซ้อนกัน


คำอธิบาย

ใช้ 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):

  1. REPLACE(Number, '-', ''): ลบ -
  2. REPLACE(..., ' ', ''): ลบช่องว่าง
  3. REPLACE(..., '"', ''): ลบอัญประกาศ
  4. 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)