MySQL-এ যদি ডেট স্ট্রিং আকারে (VARCHAR) সংরক্ষিত থাকে, তবে সেটি স্ট্রিং হিসেবে সাজায় (লেক্সিকোগ্রাফিক্যালি), যা ভুল ফলাফল দেয়। সঠিক ক্রমে সাজাতে STR_TO_DATE() ব্যবহার করে ডেট অবজেক্টে রূপান্তর করা হয়।
টেবিল ও ডেটা (স্ট্রিং ফরম্যাটে)
mysql> CREATE TABLE DemoTable (AdmissionDate VARCHAR(200));
mysql> INSERT INTO DemoTable VALUES
('12-01-2019'), ('14-12-2016'), ('26-04-2018'), ('31-05-2013');
সাধারণ স্ট্রিং সর্ট (ভুল)
+---------------+ | AdmissionDate | +---------------+ | 12-01-2019 | | 14-12-2016 | | 26-04-2018 | | 31-05-2013 | +---------------+
STR_TO_DATE() দিয়ে সঠিক ASC সর্ট
mysql> SELECT * FROM DemoTable
ORDER BY STR_TO_DATE(AdmissionDate, '%d-%m-%Y') ASC;
ফলাফল (সঠিক ক্রোনোলজিক্যাল অর্ডার)
+---------------+ | AdmissionDate | +---------------+ | 31-05-2013 | | 14-12-2016 | | 26-04-2018 | | 12-01-2019 | +---------------+
ব্যাখ্যা: STR_TO_DATE(str, format) স্ট্রিংকে ডেট অবজেক্টে রূপান্তর করে। %d-%m-%Y ফরম্যাটে দিন-মাস-বছর। ORDER BY-এ এই ফাংশন কল করলে MySQL আন্তরিকভাবে ডেট হিসেবে সাজায়। সেরা প্র্যাকটিস: ডেট কলামে DATE বা DATETIME টাইপ ব্যবহার করুন।