SUBSTRING_INDEX + CAST দিয়ে কমা-সেপারেটেড স্ট্রিংয়ের প্রথম সংখ্যা অনুযায়ী সাজানো
MySQL-এ কমা-সেপারেটেড সংখ্যার স্ট্রিং (যেমন '245,654,76,89,98') থাকলে, SUBSTRING_INDEX(str, ',', 1) দিয়ে প্রথম কমার আগের অংশ (প্রথম সংখ্যা) বের করে CAST(... AS UNSIGNED) দিয়ে সংখ্যায় রূপান্তর করেই সাজানো যায়।
টেবিল ও ডেটা
mysql> CREATE TABLE DemoTable (SetOfNumbers TEXT);
mysql> INSERT INTO DemoTable VALUES('245,654,76,89,98'), ('2000,567,9090,6789'), ('1001,90595,657,99');
সব রেকর্ড
+--------------------+ | SetOfNumbers | +--------------------+ | 245,654,76,89,98 | | 2000,567,9090,6789 | | 1001,90595,657,99 | +--------------------+
ORDER BY প্রথম সংখ্যা (CAST + SUBSTRING_INDEX)
mysql> SELECT * FROM DemoTable ORDER BY CAST(SUBSTRING_INDEX(SetOfNumbers, ',', 1) AS UNSIGNED);
+--------------------+ | SetOfNumbers | +--------------------+ | 245,654,76,89,98 | | 1001,90595,657,99 | | 2000,567,9090,6789 | +--------------------+
ব্যাখ্যা
SUBSTRING_INDEX(SetOfNumbers, ',', 1)— প্রথম কমার আগের সাবস্ট্রিং (প্রথম সংখ্যা) রিটার্ন করে।CAST(... AS UNSIGNED)— স্ট্রিংকে বড় পূর্ণসংখ্যায় কনভার্ট করে (স্ট্রিং কম্প্যারিজন এড়াতে)۔- সাজানো হয়েছে: 245 → 1001 → 2000 (সংখ্যাসূচক অর্ধমুখী)۔
নোট
- নেগেটিভ সংখ্যা থাকলে
SIGNEDব্যবহার করুন। SUBSTRING_INDEX(str, delim, count)— count পজিটিভ হলে বাম থেকে, নেগেটিভ হলে ডান থেকে গড়ে।- পারফরম্যান্স: প্রতিটি রোতে ফাংশন কল, ইনডেক্স ব্যবহার হয় না। বড় টেবিলে জেনারেটেড কলাম + ইনডেক্স ভালো।