যদি নম্বরিক ডেটা VARCHAR কালামে থাকে, তবে স্ট্রিং তুলনা (lexicographic) হয়, যা ভুল ফলাফল দেয়। CAST(... AS SIGNED) বা CAST(... AS UNSIGNED) দিয়ে নম্বরে কনভার্ট করে তুলনা করতে হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentScore VARCHAR(100)
-> );
Query OK, 0 rows affected (0.66 sec)
mysql> INSERT INTO DemoTable(StudentScore) VALUES('90');
mysql> INSERT INTO DemoTable(StudentScore) VALUES('100');
mysql> INSERT INTO DemoTable(StudentScore) VALUES('56');
mysql> INSERT INTO DemoTable(StudentScore) VALUES('98');
সকল রেকর্ড
+-----------+--------------+ | StudentId | StudentScore | +-----------+--------------+ | 1 | 90 | | 2 | 100 | | 3 | 56 | | 4 | 98 | +-----------+--------------+
CAST দিয়ে তুলনা (৯১ এর চেয়ে বড়)
mysql> SELECT * FROM DemoTable
-> WHERE CAST(StudentScore AS SIGNED) > 91;
আউটপুট:
+-----------+--------------+ | StudentId | StudentScore | +-----------+--------------+ | 2 | 100 | | 4 | 98 | +-----------+--------------+
সতর্কতা: স্ট্রিং হিসেবে তুলনা করলে '100' > '91' মিথ্যা হয় (কারণ '1' < '9')। তাই CAST অপরিহার্য।