เมื่อคอลัมน์ VARCHAR เก็บตัวเลขเป็นสตริง ต้องแปลงเป็นตัวเลขด้วย CAST(... AS SIGNED) ก่อนจึงจะหา MIN() และ MAX() ได้ถูกต้อง (ไม่เช่นนั้นจะเรียงแบบสตริง: '190' > '230')
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Value varchar(100) );
Query OK, 0 rows affected (0.75 sec)
เพิ่มข้อมูลตัวเลขเป็นสตริง
mysql> insert into DemoTable values('190');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('230');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('120');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('189');
Query OK, 1 row affected (0.19 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
+-------+ | Value | +-------+ | 190 | | 230 | | 120 | | 189 | +-------+ 4 rows in set (0.00 sec)
คำสั่งหา Min และ Max แปลงเป็น SIGNED ก่อน
mysql> select min(cast(Value AS SIGNED)) AS Min, max(cast(Value AS SIGNED)) AS Max from DemoTable;
ผลลัพธ์
+------+------+ | Min | Max | +------+------+ | 120 | 230 | +------+------+ 1 row in set (0.03 sec)
คำอธิบาย: หากไม่ CAST: MIN('190','230','120','189') จะได้ '120' (ถูกต้องแบบสตริง) แต่ MAX จะได้ '90' (เพราะ '9' > '2' ในตัวอักษรแรก) - ผิดพลาด!
ชนิดข้อมูลสำหรับ CAST: SIGNED (Integer), UNSIGNED, DECIMAL, DATE, DATETIME, CHAR