সমস্যা
স্ট্রিং হিসেবে স সংরক্ষিত সংখ্যাগুলো (যেমন 'STU-MIT-10', 'STU-MIT-143') ডিফল্ট সর্টিংয়ে সঠিক ক্রমে আসে না কারণ স্ট্রিং তে '১৪৩' '১০'-এর আগে আসে।
সারণি ও ডেটা
mysql> create table DemoTable1623 (StudentCode varchar(20));
mysql> insert into DemoTable1623 values('STU-MIT-143'),('STU-MIT-10'),('STU-MIT-150'),('STU-MIT-148');
সমাধান: SUBSTRING_INDEX + কাস্টিং
mysql> select * from DemoTable1623
-> order by substring_index(StudentCode, '-', 1),
-> substring_index(StudentCode, '-', -1) + 0;
ফলাফল
+-------------+ | StudentCode | +-------------+ | STU-MIT-10 | | STU-MIT-143 | | STU-MIT-148 | | STU-MIT-150 | +-------------+
ব্যাখ্যা
- SUBSTRING_INDEX(str, delim, count) — ডেলিমিটার দিয়ে ভাগ করে নির্দিষ্ট অংশ বের করে
substring_index(StudentCode, '-', 1)— প্রথম অংশ 'STU' (সর্টিংয়ের প্রথম স্তর)substring_index(StudentCode, '-', -1)— শেষ অংশ সংখ্যা (যেমন '১০', '১৪৩')- + 0 — স্ট্রিংকে সংখ্যায় কনভার্ট করে যাতে সংখ্যাসামঞ্জস্যপূর্ণ সর্ট হয়
এই পদ্ধতি কোনো রেগুলার এক্সপ্রেশন ছাড়া দ্রুত ও কার্যকর।