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

หาค่าสูงสุดจากตัวเลขที่เก็บเป็น VARCHAR ใน MySQL ด้วย CAST

บทความนี้สาธิตการหาค่าสูงสุด (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) ตั้งแต่แรก