วิธีที่เหมาะสมที่สุดในการค้นหาเลขที่ขึ้นต้นด้วยตัวเลขเฉพาะคือใช้ LIKE operator ร่วมกับ wildcard %
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
ClientId bigint,
ClientName varchar(40) );
Query OK, 0 rows affected (0.82 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values(23568777,'Chris Brown'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(9085544,'John Doe'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(9178432,'John Doe'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(9078482,'David Miller'); Query OK, 1 row affected (0.17 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+----------+--------------+ | ClientId | ClientName | +----------+--------------+ | 23568777 | Chris Brown | | 9085544 | John Doe | | 9178432 | John Doe | | 9078482 | David Miller | +----------+--------------+ 4 rows in set (0.00 sec)
คิวรี่ค้นหา ClientId ที่ขึ้นต้นด้วย 90
mysql> select *from DemoTable where ClientId LIKE '90%';
ผลลัพธ์:
+----------+--------------+ | ClientId | ClientName | +----------+--------------+ | 9085544 | John Doe | | 9078482 | David Miller | +----------+--------------+ 2 rows in set (0.00 sec)
คำอธิบาย
- MySQL แปลงตัวเลขเป็นสตริงอัตโนมัติเมื่อใช้กับ LIKE
'90%'หมายถึง เริ่มต้นด้วย 90 ตามด้วยอะไรก็ได้- ใช้ Index ได้หากคอลัมน์เป็น VARCHAR แต่ถ้าเป็น BIGINT อาจไม่ใช้ Index (ต้องแปลงชนิดข้อมูลหรือใช้ Range query)
วิธีทางเลือกสำหรับตัวเลข (มีประสิทธิภาพมากกว่า)
-- สำหรับค่าที่ขึ้นต้นด้วย 90 (ช่วง 90,000,000 - 90,999,999) SELECT * FROM DemoTable WHERE ClientId BETWEEN 90000000 AND 90999999; -- หรือใช้ DIV SELECT * FROM DemoTable WHERE ClientId DIV 1000000 = 90;
ข้อแนะนำ
สำหรับคอลัมน์ตัวเลข ควรใช้การเปรียบเทียบช่วง (BETWEEN) หรือคณิตศาสตร์ แทน LIKE เพื่อให้ใช้ Index ได้และเร็วกว่า