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

เปรียบเทียบสตริงตัวเลขใน MySQL

เปรียบเทียบ 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