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

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

ปัญหาการเปรียบเทียบตัวเลขที่เก็บเป็น VARCHAR

เมื่อตัวเลขถูกเก็บเป็น VARCHAR การใช้ MAX() โดยตรงจะเปรียบเทียบแบบ String (Lexicographical) ทำให้ '9' มากกว่า '10001'

วิธีแก้: ใช้ CAST() ร่วมกับ MAX()

SELECT MAX(CAST(column_name AS UNSIGNED)) 
FROM table_name;

ตัวอย่าง

CREATE TABLE DemoTable2030 (Value VARCHAR(20));

INSERT INTO DemoTable2030 VALUES ('8'), ('1'), ('10001'), ('901');

-- ผิด: เปรียบเทียบแบบ String
SELECT MAX(Value) FROM DemoTable2030; -- ได้ '901'

-- ถูก: แปลงเป็นตัวเลขก่อน
SELECT MAX(CAST(Value AS UNSIGNED)) FROM DemoTable2030; -- ได้ 10001

ผลลัพธ์ที่ถูกต้อง

MAX(CAST(Value AS UNSIGNED))
10001

ประเภทข้อมูลที่ใช้ CAST ได้: UNSIGNED, SIGNED, DECIMAL, DATE, DATETIME, CHAR, BINARY