১. ভূমিকা
MySQL-এ তারিখ পরিচালনা করা ডেটাবেস অপারেশনের অন্যতম গুরুত্বপূর্ণ দিক। উদাহরণস্বরূপ, তারিখ অনুযায়ী বিক্রয় ডেটা সংকলন করা বা নির্দিষ্ট সময়সীমার মধ্যে রেকর্ড অনুসন্ধান করার সময়, তারিখ তুলনা অপরিহার্য হয়ে ওঠে।
এই প্রবন্ধটি MySQL-এ তারিখের ম্যানিপুলেশন ও তুলনার মৌলিক বিষয় থেকে শুরু করে উন্নত ব্যবহারিক কেস এবং পারফরম্যান্স অপ্টিমাইজেশন টেকনিক পর্যন্ত সবকিছু ব্যাখ্যা করে। এটি নবীন থেকে মধ্যম স্তরের ডেভেলপার পর্যন্ত সকল স্তরের ব্যবহারকারীর জন্য উপযোগীভাবে ডিজাইন করা হয়েছে।
২. MySQL তারিখ ডেটা টাইপের ওভারভিউ
তারিখ ডেটা টাইপের প্রকার এবং তাদের বৈশিষ্ট্য
MySQL নিম্নলিখিত তিনটি প্রধান তারিখ ডেটা টাইপ প্রদান করে। নিচে প্রতিটির সংক্ষিপ্ত ব্যাখ্যা দেওয়া হয়েছে।
- DATE
- সংরক্ষিত মান: বছর-মাস-দিন (
YYYY-MM-DD) - বৈশিষ্ট্য: সময়ের তথ্য অন্তর্ভুক্ত করে না, তাই সহজ তারিখ পরিচালনার জন্য উপযুক্ত।
- ব্যবহারিক উদাহরণ: জন্মদিন, ডেডলাইন।
- DATETIME
- সংরক্ষিত মান: বছর-মাস-দিন এবং সময় (
YYYY-MM-DD HH:MM:SS) - বৈশিষ্ট্য: সময়ের তথ্য অন্তর্ভুক্ত করে, তাই সুনির্দিষ্ট টাইমস্ট্যাম্প রেকর্ড করার জন্য উপযুক্ত।
- ব্যবহারিক উদাহরণ: তৈরি করার টাইমস্ট্যাম্প, সর্বশেষ আপডেটের টাইমস্ট্যাম্প।
- TIMESTAMP
- সংরক্ষিত মান: বছর-মাস-দিন এবং সময় (
YYYY-MM-DD HH:MM:SS) - বৈশিষ্ট্য: টাইম জোনের উপর নির্ভরশীল, তাই বিভিন্ন অঞ্চলের মধ্যে তারিখ ও সময় পরিচালনার জন্য উপযোগী।
- ব্যবহারিক উদাহরণ: লগ ডেটা, লেনদেন রেকর্ড।
উপযুক্ত ডেটা টাইপ কীভাবে নির্বাচন করবেন
- যদি সময়ের প্রয়োজন না থাকে, DATE নির্বাচন করুন।
- যদি সময়ের প্রয়োজন হয়, আপনার অ্যাপ্লিকেশনের টাইম জোনের চাহিদা অনুযায়ী DATETIME অথবা TIMESTAMP নির্বাচন করুন।
নমুনা কুয়েরি
নিচে প্রতিটি ডেটা টাইপ ব্যবহার করে একটি উদাহরণ দেওয়া হয়েছে।
CREATE TABLE events (
event_id INT AUTO_INCREMENT PRIMARY KEY,
event_date DATE,
event_datetime DATETIME,
event_timestamp TIMESTAMP
);
৩. কীভাবে তারিখ তুলনা করবেন
মৌলিক তুলনা অপারেটর ব্যবহার করে
MySQL-এ তারিখ তুলনার জন্য নিম্নলিখিত অপারেটরগুলি ব্যবহার করা হয়।
=(সমান)
- নির্দিষ্ট তারিখের সাথে মিলে এমন রেকর্ড পুনরুদ্ধার করে।
SELECT * FROM events WHERE event_date = '2025-01-01';
>/<(বড় / ছোট)
- নির্দিষ্ট তারিখের আগে বা পরে থাকা রেকর্ড অনুসন্ধান করে।
SELECT * FROM events WHERE event_date > '2025-01-01';
<=/>=(ছোট বা সমান / বড় বা সমান)
- নির্দিষ্ট তারিখ অন্তর্ভুক্ত করে এমন একটি রেঞ্জের মধ্যে অনুসন্ধান করে।
SELECT * FROM events WHERE event_date <= '2025-01-10';
BETWEEN ব্যবহার করে রেঞ্জ কুয়েরি
BETWEEN অপারেটর ব্যবহার করে সহজে একটি তারিখ রেঞ্জ নির্ধারণ করা যায়।
SELECT * FROM events
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-31';
গুরুত্বপূর্ণ নোট:
BETWEENশুরু এবং শেষ উভয় মানই অন্তর্ভুক্ত করে, তাই আপনার রেঞ্জ থেকে কোনো প্রয়োজনীয় ডেটা অনিচ্ছাকৃতভাবে বাদ না যায় তা নিশ্চিত করুন।
৪. তারিখ পার্থক্য গণনা
DATEDIFF ফাংশন ব্যবহার করে
DATEDIFF() ফাংশন দুটি তারিখের মধ্যে পার্থক্য (দিনে) গণনা করে।
SELECT DATEDIFF('2025-01-10', '2025-01-01') AS days_difference;
ফলাফল:
- ৯ দিন
TIMESTAMPDIFF ফাংশন ব্যবহার করে
TIMESTAMPDIFF() ফাংশন আপনাকে বছর, মাস, দিন বা ঘন্টা ইত্যাদি নির্দিষ্ট ইউনিটে পার্থক্য গণনা করতে দেয়।
SELECT TIMESTAMPDIFF(MONTH, '2025-01-01', '2025-12-31') AS months_difference;
ফলাফল:
- ১১ মাস
৫. তারিখ যোগ ও বিয়োগ
INTERVAL ক্লজ ব্যবহার করে তারিখ ম্যানিপুলেশন
MySQL-এ আপনি INTERVAL ক্লজ ব্যবহার করে সহজে একটি তারিখে সময় যোগ বা বিয়োগ করতে পারেন। এটি আপনাকে নির্দিষ্ট সময়সীমার আগে বা পরে থাকা তারিখ পুনরুদ্ধারকারী কুয়েরি তৈরি করতে সহায়তা করে।
একটি তারিখে যোগ করা
INTERVAL ব্যবহার করে একটি তারিখে সময় যোগ করার উদাহরণঃ
SELECT DATE_ADD('2025-01-01', INTERVAL 7 DAY) AS plus_seven_days;
ফলাফল:
২০২৫-০১-০৮
একটি তারিখ থেকে বিয়োগ করা
আপনি একইভাবে INTERVAL ব্যবহার করে একটি তারিখ থেকে সময় বিয়োগ করতে পারেনঃ
SELECT DATE_SUB('2025-01-01', INTERVAL 1 MONTH) AS minus_one_month;
ফলাফল:
২০২৪-১২-০১
ব্যবহারের ক্ষেত্র: রিমাইন্ডার সিস্টেম
নিচে একটি উদাহরণ ক্যোয়ারি দেওয়া হলো যা ঠিক সাত দিন আগের ঘটনাগুলি পুনরুদ্ধার করে, যা স্বয়ংক্রিয় রিমাইন্ডার বিজ্ঞপ্তি পাঠানোর জন্য ব্যবহার করা যেতে পারে।
SELECT event_name, event_date
FROM events
WHERE event_date = DATE_SUB(CURDATE(), INTERVAL 7 DAY);
বর্তমান তারিখের উপর ভিত্তি করে গণনা
CURDATE(): বর্তমান তারিখ প্রদান করে (YYYY-MM-DD)।NOW(): বর্তমান তারিখ এবং সময় প্রদান করে (YYYY-MM-DD HH:MM:SS)।
উদাহরণ: আজ থেকে এক সপ্তাহ পরের তারিখ গণনা করুন।
SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY) AS next_week;
৬. ব্যবহারিক ক্যোয়ারি উদাহরণসমূহ
একটি নির্দিষ্ট তারিখের জন্য রেকর্ড পুনরুদ্ধার করুন
নির্দিষ্ট তারিখের সাথে মিলে যাওয়া ঘটনাগুলি পুনরুদ্ধার করুন।
SELECT *
FROM events
WHERE event_date = '2025-01-01';
তারিখের পরিসরের মধ্যে ডেটা পুনরুদ্ধার করুন
এক সপ্তাহের পরিসরের মধ্যে ঘটনাগুলির জন্য অনুসন্ধানের উদাহরণ।
SELECT *
FROM events
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-07';
তারিখ অনুসারে ডেটা একত্রিত করা
এই ক্যোয়ারিটি প্রতি মাসের জন্য কতগুলি ঘটনা নিবন্ধিত আছে তা গণনা করে।
SELECT MONTH(event_date) AS event_month, COUNT(*) AS total_events
FROM events
GROUP BY MONTH(event_date);
উদাহরণ ফলাফল:
| event_month | total_events |
|---|---|
| 1 | 10 |
| 2 | 15 |
৭. পারফরম্যান্স অপ্টিমাইজেশন
ইনডেক্স ব্যবহার করে দক্ষ অনুসন্ধান
তারিখের কলামে একটি ইনডেক্স সেট করা ক্যোয়ারি পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত করতে পারে।
একটি ইনডেক্স তৈরি করা
নিম্নলিখিত SQL event_date কলামে একটি ইনডেক্স তৈরি করে।
CREATE INDEX idx_event_date ON events(event_date);
ইনডেক্সের প্রভাব পরীক্ষা করা
আপনি EXPLAIN ব্যবহার করে ক্যোয়ারি এক্সিকিউশন প্ল্যান পরীক্ষা করতে পারেন।
EXPLAIN SELECT *
FROM events
WHERE event_date = '2025-01-01';
ফাংশন ব্যবহার করার সময় গুরুত্বপূর্ণ নোটস
WHERE ক্লজে ফাংশন ব্যবহার করা ইনডেক্স ব্যবহার নিষ্ক্রিয় করতে পারে।
খারাপ উদাহরণ
নিম্নলিখিত ক্যোয়ারিতে, DATE() ফাংশন ইনডেক্স ব্যবহার হওয়া থেকে বিরত করে।
SELECT *
FROM events
WHERE DATE(event_date) = '2025-01-01';
উন্নত উদাহরণ
ফাংশন ব্যবহার না করে মানগুলি সরাসরি তুলনা করার সুপারিশ করা হয়।
SELECT *
FROM events
WHERE event_date >= '2025-01-01'
AND event_date < '2025-01-02';

৮. FAQ (ঘন ঘন জিজ্ঞাসিত প্রশ্নসমূহ)
Q1: DATE এবং DATETIME এর মধ্যে পার্থক্য কী?
- A1:
- DATE: শুধুমাত্র তারিখ সংরক্ষণ করে (
YYYY-MM-DD)। সময়ের তথ্য প্রয়োজন না হলে এটি ব্যবহার করুন। - DATETIME: তারিখ এবং সময় উভয়ই সংরক্ষণ করে (
YYYY-MM-DD HH:MM:SS)। একটি ঘটনার সঠিক টাইমস্ট্যাম্প প্রয়োজন হলে এটি ব্যবহার করুন।
উদাহরণ:
CREATE TABLE examples (
example_date DATE,
example_datetime DATETIME
);
Q2: BETWEEN ব্যবহার করে তারিখের পরিসর নির্দিষ্ট করার সময় কীসের প্রতি সতর্ক থাকব?
- A2:
- যেহেতু
BETWEENশুরু এবং শেষ তারিখ উভয়কেই অন্তর্ভুক্ত করে, যদি শেষ তারিখে সময়ের মান অন্তর্ভুক্ত না থাকে, তাহলে আপনি সকল উদ্দিষ্ট রেকর্ড পুনরুদ্ধার করতে পারবেন না।
উদাহরণ:
-- This query may not retrieve records such as "2025-01-31 23:59:59"
SELECT *
FROM events
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-31';
উন্নতি:
শেষ সময়কে স্পষ্টভাবে ২৩:৫৯:৫৯-এ সেট করুন অথবা সময়ের অংশ উপেক্ষা করে একটি তুলনা ব্যবহার করুন।
SELECT *
FROM events
WHERE event_date >= '2025-01-01' AND event_date < '2025-02-01';
Q3: সময় অঞ্চলের পার্থক্য কীভাবে পরিচালনা করা উচিত?
- A3: MySQL-এ,
TIMESTAMPটাইপ সময় অঞ্চল নির্ভর। বিপরীতে,DATETIMEটাইপ একটি নির্দিষ্ট মান সংরক্ষণ করে এবং সময় অঞ্চল দ্বারা প্রভাবিত হয় না।
বর্তমান সময় অঞ্চল সেটিং পরীক্ষা করুন:
SHOW VARIABLES LIKE 'time_zone';
সময় অঞ্চল সেটিং পরিবর্তন করুন:
SET time_zone = '+09:00'; -- Japan Standard Time (JST)
Q4: অতীত ৩০ দিনের ডেটা কীভাবে পুনরুদ্ধার করব?
- A4: আপনি
CURDATE()বাNOW()কেINTERVAL-এর সাথে যুক্ত করে অতীত ৩০ দিনের ডেটা পুনরুদ্ধার করতে পারেন।
উদাহরণ:
SELECT *
FROM events
WHERE event_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
Q5: কীভাবে আমি তারিখ তুলনার পারফরম্যান্স উন্নত করতে পারি?
- A5:
- ইন্ডেক্স তৈরি করুন: তারিখ কলামগুলিতে একটি ইন্ডেক্স সেট করুন।
- ফাংশন ব্যবহার এড়িয়ে চলুন:
WHEREক্লজে ফাংশন ব্যবহার করলে ইন্ডেক্স নিষ্ক্রিয় হতে পারে, তাই সরাসরি তুলনা ব্যবহার করুন।
9. সারাংশ
এই প্রবন্ধের মূল বিষয়বস্তু
এই প্রবন্ধটি MySQL-এ তারিখ পরিচালনা এবং তুলনা কৌশলগুলির একটি বিস্তৃত ব্যাখ্যা প্রদান করেছে। মূল বিষয়বস্তু নিম্নরূপ:
- তারিখ ডেটা টাইপ (DATE, DATETIME, TIMESTAMP)-এর বৈশিষ্ট্য এবং সঠিক ব্যবহার বোঝা।
- মৌলিক তুলনা পদ্ধতি (
=,>,<,BETWEEN, ইত্যাদি)। - তারিখ পার্থক্য গণনা (
DATEDIFF(),TIMESTAMPDIFF())। - ইন্ডেক্সিং এবং সর্বোত্তম কুয়েরি ডিজাইনের মাধ্যমে পারফরম্যান্স উন্নত করা।
আমরা আশা করি এই গাইডটি আপনাকে MySQL-এ তারিখ অপারেশনগুলি দক্ষতার সাথে পরিচালনা করতে এবং বাস্তবিক, অপ্টিমাইজড কুয়েরি তৈরি করতে সহায়তা করবে।


