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

MySQL-এ VARCHAR ডেটা টাইপের তারিখ থেকে নির্দিষ্ট মাস ফিল্টার করা (STR_TO_DATE, MONTH)

MySQL-এ তারিখ যদি VARCHAR হিসেবে সংরক্ষিত থাকে (যেমন '06-19-2019'), তবে সেটি ডেট টাইপে রূপান্তর করে মাস বের করতে STR_TO_DATE() এবং MONTH() ফাংশন কম্বাইন করে ব্যবহার করা হয়।

টেবিল তৈরি এবং ডেটা ইনসার্ট

mysql> CREATE TABLE DemoTable (
    -> DueDate VARCHAR(100)
    -> );
Query OK, 0 rows affected (1.18 sec)
mysql> INSERT INTO DemoTable VALUES('06-19-2019');
mysql> INSERT INTO DemoTable VALUES('01-31-2018');
mysql> INSERT INTO DemoTable VALUES('12-01-2016');

সব রেকর্ড দেখানো

mysql> SELECT * FROM DemoTable;

আউটপুট

+------------+
| DueDate    |
+------------+
| 06-19-2019 |
| 01-31-2018 |
| 12-01-2016 |
+------------+
3 rows in set (0.00 sec)

মাস ০৬ (জুন) ফিল্টার করা

mysql> SELECT * FROM DemoTable 
    -> WHERE MONTH(STR_TO_DATE(DueDate, '%m-%d-%Y')) = 06;

আউটপুট

+------------+
| DueDate    |
+------------+
| 06-19-2019 |
+------------+
1 row in set (0.00 sec)

ব্যাখ্যা:

  1. STR_TO_DATE(DueDate, '%m-%d-%Y') — স্ট্রিং '06-19-2019' কে ডেট টাইপে রূপান্তর করে (মাস-দিন-বছর ফরম্যাট অনুযায়ী)।
  2. MONTH(...) — ডেট থেকে মাস নম্বর বের করে (৬)।
  3. = 06 — জুন মাসের রেকর্ড ফিল্টার করে।

পারফরম্যান্স সতর্কতা: কলামে ফাংশন (STR_TO_DATE, MONTH) লাগালে ইনডেক্স ব্যবহার হয় না (non-sargable)। বড় টেবিলে ধীর হবে।

সমাধান: আলাদা month কলাম রাখুন (জেনারেটেড কলাম বা ট্রিগার দিয়ে অটো পপুলেট), সেটিতে ইনডেক্স দিন। অথবা ডেটা ঠিক করুন: ALTER TABLE ... MODIFY DueDate DATE;।

  1. MySQL-এ নির্দিষ্ট কলামের ডেটা এক্সপোর্ট করুন

  2. MySQL-এ VARCHAR ফরম্যাটে তারিখ থাকলে নির্দিষ্ট রেকর্ড নির্বাচন করা

  3. MySQL-এ মাস অনুযায়ী রেকর্ড সিলেক্ট করা (MONTH() ফাংশন)

  4. MySQL-এ STR_TO_DATE() ব্যবহার করে ডেট ফরম্যাট কনভার্ট করা