কম্পিউটার টিউটোরিয়াল

MySQL-এ VARCHAR ডেট কলামে STR_TO_DATE() ব্যবহার করে SELECT করা


STR_TO_DATE() দিয়ে VARCHAR ডেট পার্স করেই WHERE ক্লজে ফিল্টার

MySQL-এ তারিখ যদি VARCHAR-এ 'DD/MM/YYYY' ফরম্যাটে থাকে, তবে STR_TO_DATE() দিয়ে সেটিকে ডেট অবজেক্টে রূপান্তর করে তুলনা করা যায়।

টেবিল ও ডেটা (DD/MM/YYYY)

mysql> CREATE TABLE DemoTable (DueDate VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES('21/10/2018'), ('18/08/2019'), ('01/12/2012'), ('31/01/2016');

সব রেকর্ড

+------------+
| DueDate    |
+------------+
| 21/10/2018 |
| 18/08/2019 |
| 01/12/2012 |
| 31/01/2016 |
+------------+

STR_TO_DATE() দিয়ে ফিল্টার (2010-01-31 এর পরের তারিখ)

mysql> SELECT * FROM DemoTable 
WHERE STR_TO_DATE(DueDate, '%d/%m/%Y') > '2010-01-31';
+------------+
| DueDate    |
+------------+
| 21/10/2018 |
| 18/08/2019 |
| 01/12/2012 |
| 31/01/2016 |
+------------+

ফরম্যাট স্পেসিফায়ার

  • %d — দিন (০১-৩১)
  • %m — মাস (০১-১২)
  • %Y — ৪ ডিজিট বছর
  • %d/%m/%Y — 'DD/MM/YYYY' ফরম্যাট ম্যাচ করে।

পারফরম্যান্স নোট

  • STR_TO_DATE প্রতি রো কল হয়, ইনডেক্স ব্যবহার হয় না (ফুল স্ক্যান)।
  • বড় টেবিলে ডেট টাইপে কনভার্ট করুন বা জেনারেটেড কলাম/ফাংশনাল ইনডেক্স (MySQL 8.0+) ব্যবহার করুন।
  1. MySQL-এ ইউজার-ডিফাইনড ভেরিয়েবল (@) ও CONCAT_WS() ব্যবহার করে রেজাল্ট টেবিলে দেখানো

  2. MySQL-এ GROUP BY + MAX() ব্যবহার করে প্রতিটি গ্রুপের সর্বোচ্চ মান বের করা

  3. MySQL-এ টেবিলে নেই এমন মানগুলো কোয়েরি করে বের করা (UNION ALL + NOT EXISTS)

  4. MySQL-এ AUTO_INCREMENT টেবিলে INSERT INTO SELECT ব্যবহার করা