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

MySQL หาค่า Max จากตัวเลขใน VARCHAR Field

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

ใช้ CAST(... AS UNSIGNED) แปลง String เป็นตัวเลข ก่อนใช้ MAX()

สร้างตาราง

CREATE TABLE findMaxValueInVarcharField (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value VARCHAR(200)
);

INSERT INTO findMaxValueInVarcharField(Value) VALUES
('200'), ('1000'), ('899474'), ('39474'), ('4958');

คำสั่งหา Max

SELECT MAX(CAST(Value AS UNSIGNED)) AS MaximumValueFromVarcharField
FROM findMaxValueInVarcharField;

ผลลัพธ์

+------------------------------+
| MaximumValueFromVarcharField |
+------------------------------+
| 899474                       |
+------------------------------+

ทำไมต้อง CAST?

  • String Max: '9' > '899474' (Lexicographic)
  • Numeric Max: 899474 > 9 (ถูกต้อง)
  • VARCHAR ไม่มี Numeric Sorting

CAST Types

TypeRangeใช้เมื่อ
UNSIGNED0 to 4,294,967,295ตัวเลขบวกเท่านั้น (แนะนำ)
SIGNED-2,147,483,648 to 2,147,483,647มีตัวเลขลบ
DECIMAL(m,n)ทศนิยมแม่นยำมีจุดทศนิยม

Performance Tip

  • CAST ทุกแถว → Full Table Scan
  • สร้าง Generated Column: Value_num INT GENERATED ALWAYS AS (CAST(Value AS UNSIGNED)) STORED + Index
  • หรือเปลี่ยน Schema ให้เป็น INT/UNSIGNED INT โดยตรง