MySQL-এ স্ট্রিং (VARCHAR/CHAR) টাইপের কলামে সংখ্যা সংরক্ষিত থাকলে, ডিফল্ট সর্টিং লেক্সিকোগ্রাফিক্যালি (অক্ষরানুক্রমে) হয়। সংখ্যা হিসেবে সর্ট করতে CAST() ফাংশন ব্যবহার করতে হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট (স্ট্রিং হিসেবে সংখ্যা)
mysql> CREATE TABLE DemoTable (Id VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES('3');
mysql> INSERT INTO DemoTable VALUES('20');
mysql> INSERT INTO DemoTable VALUES('34');
mysql> INSERT INTO DemoTable VALUES('21');
mysql> INSERT INTO DemoTable VALUES('78');
mysql> INSERT INTO DemoTable VALUES('90');
ডিফল্ট স্ট্রিং সর্টিং (লেক্সিকোগ্রাফিক্যালি)
mysql> SELECT * FROM DemoTable;
+------+
| Id |
+------+
| 3 |
| 20 |
| 34 |
| 21 |
| 78 |
| 90 |
+------+
দেখুন: '3' > '20' > '34'... কারণ '3' > '2' (প্রথম ক্যারেক্টার তুলনা)।
CAST দিয়ে সংখ্যা হিসেবে সর্ট (DESC - বড় থেকে ছোট)
mysql> SELECT * FROM DemoTable
-> ORDER BY CAST(Id AS SIGNED) DESC;
ফলাফল
+------+
| Id |
+------+
| 90 |
| 78 |
| 34 |
| 21 |
| 20 |
| 3 |
+------+
অ্যাসেন্ডিং (ছোট থেকে বড়): ORDER BY CAST(Id AS SIGNED) ASC বা শুধু ORDER BY CAST(Id AS SIGNED)
CAST টাইপ অপশনস
SIGNED- সাইনড ইন্টিজার (নেগেটিভ+পজিটিভ)UNSIGNED- অনসাইনড ইন্টিজার (শুধু পজিটিভ)DECIMAL- দশমিক সংখ্যাCHAR- ক্যারেক্টার (ডিফল্ট আচরণ)
বিকল্প: অপারেটর + 0 ব্যবহার
SELECT * FROM DemoTable ORDER BY (Id + 0) DESC;
MySQL-এ স্ট্রিং + 0 করলে অটোমেটিক্যালি সংখ্যায় রূপান্তর হয় (Type Coercion)।
সতর্কতা: CAST ব্যবহার করলে ইনডেক্স ব্যবহার হয় না (full table scan)। বড় টেবিলে পারফরম্যান্স ইস্যু হতে পারে।