บทความนี้สาธิตการหาค่าสูงสุด (Maximum) จากคอลัมน์ที่เก็บตัวเลขเป็น VARCHAR (String) โดยต้อง CAST ให้เป็นตัวเลขก่อนจึงจะเรียง/เปรียบเทียบได้ถูกต้อง
สร้างตารางและข้อมูลราคาเป็น VARCHAR
mysql> CREATE TABLE DemoTable765 (ItemPrice VARCHAR(200));
Query OK, 0 rows affected (0.52 sec)
mysql> INSERT INTO DemoTable765 VALUES('567.00'), ('1089.00'), ('540.00'), ('788.00');
คิวรีเรียงและหาค่าสูงสุดด้วย CAST
mysql> SELECT * FROM DemoTable765
ORDER BY CAST(ItemPrice AS SIGNED INTEGER) DESC;
ผลลัพธ์ (เรียงตัวเลข: 1089, 788, 567, 540)
+-----------+
| ItemPrice |
+-----------+
| 1089.00 |
| 788.00 |
| 567.00 |
| 540.00 |
+-----------+
4 rows in set, 4 warnings (0.00 sec)
คำอธิบาย:
CAST(ItemPrice AS SIGNED INTEGER)- แปลงสตริงเป็นจำนวนเต็มมีเครื่องหมาย- หากมีทศนิยม ใช้
DECIMAL(10,2)หรือDOUBLEแทนSIGNED INTEGER - Warning เกิดจากการ Cast '567.00' เป็น INTEGER จะได้ 567 (ตัดทศนิยม) แต่การเปรียบเทียบยังถูกต้อง
- แนะนำ:
CAST(ItemPrice AS DECIMAL(10,2))สำหรับราคา/เงิน
ข้อควรระวัง: การเก็บตัวเลขเป็น VARCHAR ทำให้:
- ไม่สามารถใช้ Index สำหรับ Range Query ได้อย่างมีประสิทธิภาพ
- Sorting/Comparison ต้อง Cast ทุกครั้ง (ช้า)
- อาจมีข้อมูลผิดรูปแบบ (Non-numeric) เกิด Error
- Best Practice: ใช้ชนิดข้อมูลตัวเลข (INT, DECIMAL, FLOAT) ตั้งแต่แรก