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

การค้นหาข้อมูลที่ขึ้นต้นด้วยตัวเลขเฉพาะใน MySQL ด้วย LIKE

วิธีที่เหมาะสมที่สุดในการค้นหาเลขที่ขึ้นต้นด้วยตัวเลขเฉพาะคือใช้ 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 ได้และเร็วกว่า