নিয়মিত অভিব্যক্তি (Regular Expression) CASE স্টেটমেন্টের সাথে ব্যবহার করুন। প্রথমে একটি টেবিল তৈরি করি:
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value VARCHAR(20)
);
রেকর্ড যোগ করি:
mysql> INSERT INTO DemoTable(Value) VALUES('101');
mysql> INSERT INTO DemoTable(Value) VALUES('P');
mysql> INSERT INTO DemoTable(Value) VALUES('A');
mysql> INSERT INTO DemoTable(Value) VALUES('53');
mysql> INSERT INTO DemoTable(Value) VALUES('R');
mysql> INSERT INTO DemoTable(Value) VALUES('C');
mysql> INSERT INTO DemoTable(Value) VALUES('190');
সকল রেকর্ড দেখতে:
mysql> SELECT * FROM DemoTable;
আউটপুট:
+----+-------+ | Id | Value | +----+-------+ | 1 | 101 | | 2 | P | | 3 | A | | 4 | 53 | | 5 | R | | 6 | C | | 7 | 190 | +----+-------+
ORDER BY CASE দিয়ে সর্ট করার কোয়েরি:
mysql> SELECT Id, Value FROM DemoTable ORDER BY CASE WHEN Value REGEXP '[a-zA-Z]' THEN 0 ELSE 0+Value END ASC, Value;
আউটপুট:
+----+-------+ | Id | Value | +----+-------+ | 3 | A | | 6 | C | | 2 | P | | 5 | R | | 4 | 53 | | 1 | 101 | | 7 | 190 | +----+-------+
ব্যাখ্যা: এখানে REGEXP '[a-zA-Z]' দিয়ে চেক করা হয়েছে যে Value-তে কোনো অক্ষর আছে কিনা। যদি হয় (THEN 0), তবে সেগুলো প্রথমে আসবে এবং অক্ষর অনুযায়ী সাজাবে। না হলে (ELSE 0+Value) সংখ্যাগুলো সংখ্যাসমূহিক ক্রমে সাজাবে। 0+Value লিখলে স্ট্রিং সংখ্যায় রূপান্তরিত হয়।