VARCHAR কলামে সংখ্যা ও টেক্সট মিশ্র থাকলে সঠিক সর্ট করতে CAST() এবং IF() ব্যবহার করুন।
সমস্যা
mysql> CREATE TABLE DemoTable (EmployeeCode VARCHAR(100));
Query OK, 0 rows affected (1.17 sec)
mysql> INSERT INTO DemoTable VALUES ('190'), ('100'), ('John'), ('120');
Query OK, 4 rows affected
mysql> SELECT * FROM DemoTable ORDER BY EmployeeCode;
-- স্ট্রিং সর্ট: 100, 120, 190, John (সঠিক নয়)
সমাধান: সংখ্যা আগে, তারপর স্ট্রিং
mysql> SELECT * FROM DemoTable ORDER BY IF(CAST(EmployeeCode AS SIGNED) = 0, 100000000000, CAST(EmployeeCode AS SIGNED));
ফলাফল
+--------------+ | EmployeeCode | +--------------+ | 100 | | 120 | | 190 | | John | +--------------+
ব্যাখ্যা
CAST(... AS SIGNED)→ স্ট্রিংকে সাইনড ইন্টিজারে কনভার্ট করে- স্ট্রিং (যেমন 'John') কাস্ট করলে
0রিটার্ন করে IF(..., 100000000000, ...)→ স্ট্রিংয়ের জন্য বড় মান দিয়ে শেষে পাঠিয়েছে- সুতরাং সংখ্যাগুলো সঠিক নম্বরিক অর্ডারে সর্ট হয়, স্ট্রিংগুলো পরে
আধুনিক বিকল্প (MySQL 8.0+)
ORDER BY (EmployeeCode REGEXP '^[0-9]+$') DESC, CAST(EmployeeCode AS UNSIGNED), EmployeeCode
রেগেক্স দিয়ে নাম্বার-অনলি চেক করে প্রথমে নাম্বার, তারপর স্ট্রিং সর্ট করে।