เปรียบเทียบ String ที่เป็นตัวเลข ใช้ CAST
คอลัมน์ VARCHAR ที่เก็บตัวเลข ต้อง Cast เป็น SIGNED/UNSIGNED ก่อนเปรียบเทียบ
ตัวอย่าง
CREATE TABLE compareTwoStringsDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value VARCHAR(100)
);
INSERT INTO compareTwoStringsDemo(Value) VALUES
('1235667'), ('999999'), ('999888'), ('567433'), ('2345123');
เปรียบเทียบแบบ String (ผิด)
SELECT * FROM compareTwoStringsDemo WHERE Value = '999999';
ทำงานได้ เพราะค่าตรงกันเป๊ะ
เปรียบเทียบแบบ Number (ถูกต้อง)
SELECT * FROM compareTwoStringsDemo WHERE CAST(Value AS SIGNED) = 999999;
ผลลัพธ์
+----+--------+ | Id | Value | +----+--------+ | 2 | 999999 | +----+--------+
ทำไมต้อง CAST?
- String Comparison: '2' > '10000' (เพราะ '2' > '1')
- Numeric Comparison: 2 < 10000 (ถูกต้อง)
- Index บน VARCHAR ไม่ทำงานกับการเปรียบเทียบตัวเลข
CAST Options
CAST(Value AS SIGNED)- Signed Integer (-2147483648 to 2147483647)CAST(Value AS UNSIGNED)- Unsigned Integer (0 to 4294967295)CAST(Value AS DECIMAL(10,2))- ทศนิยมValue + 0- Shorthand แปลงเป็น Number