MySQL-এ সংখ্যা মিশ্র স্ট্রিং সঠিকভাবে সর্ট করতে ORDER BY এর সাথে কিছু đặc biệt কেস ব্যবহার করতে হয়। প্রথমে একটি টেবিল তৈরি করা যাক:
mysql> create table demo18 (
value text
);
Query OK, 0 rows affected (1.18 sec)
কিছু রেকর্ড যোগ করুন:
mysql> insert into demo18 values('John Smith');
Query OK, 1 row affected (0.06 sec)
mysql> insert into demo18 values('2J John has 58');
Query OK, 1 row affected (0.17 sec)
mysql> insert into demo18 values('2J John has 9');
Query OK, 1 row affected (0.09 sec)
রেকর্ডগুলো দেখুন:
mysql> select * from demo18;
আউটপুট:
+----------------+ | value | +----------------+ | John Smith | | 2J John has 58 | | 2J John has 9 | +----------------+ 3 rows in set (0.00 sec)
সঠিক সর্ট করার কোয়েরি (নিজস্ব ক مرتেন বড় সংখ্যা আগে আসবে):
mysql> select * from demo18 order by regexp_replace(value, '[0-9]*$', ''), length(value), value;
আউটপুট (৯ আগে, তারপর ৫৮, সবশেষে John Smith):
+----------------+ | value | +----------------+ | 2J John has 9 | | 2J John has 58 | | John Smith | +----------------+ 3 rows in set (0.14 sec)
ব্যাখ্যা
- REGEXP_REPLACE(value, '[0-9]*$', ''): স্ট্রিং-এর শেষে থাকা সংখ্যা সরিয়ে শুধু প্রিফিক্স বাড়ি রাখে।
- LENGTH(value): প্রিফিক্স একই হলে ছোট স্ট্রিং আগে আসে।
- VALUE: অবশেষে লেক্সিকোগ্রাফিকালি সর্ট করে।
এই পদ্ধতিতে '2J John has 9' '2J John has 58'-র আগে আসে, কারণ ৯ < ৫৮। সাধারণ স্ট্রিং সর্টে '58' '9'-এর আগে আসত।