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

MySQL-এ বছরের বিষয় না করে তারিখ রেঞ্জ ক্যোয়ারি করা (DATE_FORMAT)

বছরের কথা না কয়েক নির্দিষ্ট মাস-দিনের রেঞ্জের (যেমন ১ জানুয়ারি থেকে ৩১ মার্চ) ডেটা ফিল্টার করতে DATE_FORMAT() ব্যবহার করে মাস-দিন অংশ বের করুন।

সিনট্যাক্স

SELECT * FROM table_name
WHERE DATE_FORMAT(date_column, '%m-%d') BETWEEN '01-01' AND '03-31';

উদাহরণ

CREATE TABLE ignore_year_demo (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    shipping_date DATE
);

INSERT INTO ignore_year_demo (shipping_date) VALUES
('2016-01-31'), ('2018-01-31'), ('2015-06-23'), ('2015-06-23'),
('2014-02-01'), ('2019-01-31'), ('2019-02-14'), ('2019-03-12');

ক্যোয়ারি: ১ জানুয়ারি থেকে ৩১ মার্চ পর্যন্ত (বছর নির্বিশেষে)

SELECT * FROM ignore_year_demo
WHERE DATE_FORMAT(shipping_date, '%m-%d') BETWEEN '01-01' AND '03-31';

ফলাফল

+----+--------------+
| id | shipping_date|
+----+--------------+
| 1  | 2016-01-31   |
| 2  | 2018-01-31   |
| 5  | 2014-02-01   |
| 6  | 2019-01-31   |
| 7  | 2019-02-14   |
| 8  | 2019-03-12   |
+----+--------------+

২০১৫-০৬-২৩ এবং ২০১৫-০৬-২৩ বাদ পড়েছে কারণ জুন (০৬) রেঞ্জের বাইরে।

উন্নত পদ্ধতি: স্ট্রিং কম্পারিশন এড়াতে (পারফরম্যান্স)

-- স্ট্রিং কম্পারিশন ইনডেক্স ব্যবহার করে না
WHERE DATE_FORMAT(shipping_date, '%m-%d') BETWEEN '01-01' AND '03-31'

-- ভালো: DAYOFYEAR ব্যবহার করুন (১-৩৬৬)
WHERE DAYOFYEAR(shipping_date) BETWEEN 1 AND 90  -- ৩১ মার্চ = ৯০তম দিন (লিপ ইয়ারে ৯১)

লিপ ইয়ার হ্যান্ডলিং

-- ১ জানুয়ারি থেকে ২৮ ফেব্রুয়ারি (লিপ ইয়ার নির্বিশেষে নিরাপদ)
WHERE DATE_FORMAT(shipping_date, '%m-%d') BETWEEN '01-01' AND '02-28'

-- অথবা মাস ও দিন আলাদা করে
WHERE (MONTH(shipping_date) = 1) 
   OR (MONTH(shipping_date) = 2 AND DAY(shipping_date) <= 28)
   OR (MONTH(shipping_date) = 3 AND DAY(shipping_date) <= 31)

ইনডেক্সিং টিপ

DATE_FORMAT() বা DAYOFYEAR() ফাংশন কলামে ব্যবহার করলে ইনডেক্স ব্যবহার হয় না। বড় টেবিলের জন্য:

-- জেনারেটেড কলাম + ইনডেক্স (MySQL 5.7+)
ALTER TABLE ignore_year_demo
ADD COLUMN day_of_year SMALLINT GENERATED ALWAYS AS (DAYOFYEAR(shipping_date)) STORED,
ADD INDEX idx_doy (day_of_year);

-- ক্যোয়ারি
SELECT * FROM ignore_year_demo WHERE day_of_year BETWEEN 1 AND 90;
  1. MySQL কোয়েরি দিয়ে কারেন্ট ডেট কোনো ডেট রেঞ্জে পড়ে কিনা চেক করা

  2. MySQL에서 날짜 문자열을 요일 기준 월요일로 맞춰 표시하기 (STR_TO_DATE, WEEKDAY, DATE_FORMAT)

  3. MySQL-এ DATE_ADD() ব্যবহার করে ডেট/টাইম মান সেকেন্ডে বৃদ্ধি করা

  4. MySQL-এ DATE_ADD ব্যবহার করে টেবিলের তারিখ আপডেট করা (বছর যোগ/বিয়োগ)