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

หาค่า Min และ Max จากคอลัมน์ VARCHAR ตัวเลขใน MySQL แสดงแยกคอลัมน์

เมื่อคอลัมน์ 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