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

เปรียบเทียบตัวเลขในคอลัมน์ VARCHAR ของ MySQL

ใช้ CAST(column AS SIGNED) หรือ CAST(column AS UNSIGNED) แปลง VARCHAR เป็นตัวเลขก่อนเปรียบเทียบ

ตัวอย่างการใช้งาน

1. สร้างตารางเก็บคะแนนเป็น VARCHAR

mysql> create table DemoTable (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentScore varchar(100)
    -> );
mysql> insert into DemoTable(StudentScore) values('90'), ('100'), ('56'), ('98');

2. เปรียบเทียบด้วย CAST AS SIGNED

mysql> SELECT * FROM DemoTable WHERE CAST(StudentScore AS SIGNED) > 91;

ผลลัพธ์ (ได้ 100 และ 98)

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
| 2         | 100          |
| 4         | 98           |
+-----------+--------------+

ชนิดข้อมูลเป้าหมายใน CAST

Typeช่วงค่าใช้เมื่อ
SIGNED-2147483648 ถึง 2147483647มีค่าลบได้
UNSIGNED0 ถึง 4294967295แค่ค่าบวก
DECIMAL(m,d)ทศนิยมแม่นยำเงิน, คะแนนทศนิยม
DOUBLEจำนวนจริงคำนวณวิทยาศาสตร์

วิธีอื่น: การแปลงโดยนำหน้าด้วย 0

SELECT * FROM DemoTable WHERE (StudentScore + 0) > 91;

ข้อดี: เขียนสั้น, ใช้ Index ได้หากคอลัมน์มี Index (MySQL 8.0+)

ข้อควรระวัง

  • ค่าที่แปลงไม่ได้ (เช่น 'abc') จะกลายเป็น 0 พร้อม Warning
  • การใช้ฟังก์ชันบนคอลัมน์ (CAST(col)) ทำให้ไม่ใช้ Index ได้ → ควรสร้าง Generated Column + Index