หาค่าสูงสุดจากตัวเลขที่เก็บใน 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
| Type | Range | ใช้เมื่อ |
|---|---|---|
| UNSIGNED | 0 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 โดยตรง