MySQL-এ কোনো স্ট্রিং কলামের শেষ N ক্যারেক্টার দিয়ে সর্ট করতে RIGHT() ফাংশন ORDER BY ক্লজে ব্যবহার করুন।
সিনট্যাক্স
SELECT column_name FROM table_name ORDER BY RIGHT(column_name, 2);
উদাহরণ
CREATE TABLE order_by_last2 (
customer_id VARCHAR(20),
customer_name VARCHAR(20)
);
INSERT INTO order_by_last2 (customer_id, customer_name) VALUES
('John-98', 'John'), ('Carol-91', 'Carol'), ('Bob-99', 'Bob'), ('David-67', 'David');
আরোহী ক্রম (ASC) — ডিফল্ট
SELECT customer_id FROM order_by_last2 ORDER BY RIGHT(customer_id, 2);
+------------+
| customer_id|
+------------+
| David-67 |
| Carol-91 |
| John-98 |
| Bob-99 |
+------------+
অবরোহী ক্রম (DESC)
SELECT customer_id FROM order_by_last2 ORDER BY RIGHT(customer_id, 2) DESC;
+------------+
| customer_id|
+------------+
| Bob-99 |
| John-98 |
| Carol-91 |
| David-67 |
+------------+
অন্যান্য স্ট্রিং ফাংশন সহ সর্টিং
শুরু থেকে N ক্যারেক্টার: LEFT()
ORDER BY LEFT(column_name, 3)
সাবস্ট্রিং (পজিশন ও লেংথ): SUBSTRING()
ORDER BY SUBSTRING(column_name, 3, 2) -- ৩য় পজিশন থেকে ২ ক্যারেক্টার
পারফরম্যান্স বিবেচনা
RIGHT(),LEFT(),SUBSTRING()ফাংশন ব্যবহার করলে ইনডেক্স ব্যবহার হয় না ( فول টেবিল স্ক্যান)- বড় টেবিলে পারফরম্যান্সের জন্য জেনারেটেড কলাম + ইনডেক্স ব্যবহার করুন (MySQL 5.7+):
ALTER TABLE order_by_last2
ADD COLUMN last_two_chars VARCHAR(2) GENERATED ALWAYS AS (RIGHT(customer_id, 2)) STORED,
ADD INDEX idx_last_two (last_two_chars);
-- এখন দ্রুত সর্ট হবে
SELECT customer_id FROM order_by_last2 ORDER BY last_two_chars;
সংখ্যা হিসেবে সর্ট করলে (নাম্বারিক সর্ট)
ORDER BY CAST(RIGHT(customer_id, 2) AS UNSIGNED)
স্ট্রিং সর্টে '100' < '20' হয়, কিন্তু নাম্বারিক সর্টে 20 < 100।