MySQL বর্তমান সময়: NOW(), CURDATE(), UTC_TIMESTAMP(), সময় অঞ্চল এবং সেরা অনুশীলনসমূহ

目次

১. MySQL‑এ বর্তমান সময় পাওয়া (সংক্ষেপে: সবচেয়ে সংক্ষিপ্ত SQL চিট শিট)

যদি আপনি MySQL‑এ বর্তমান সময় পেতে চান, কেবল কয়েকটি SQL ফাংশন মনে রাখতে হবে।
নিচে “MySQL get current time” অনুসন্ধানের জন্য সবচেয়ে সংক্ষিপ্ত উত্তর দেওয়া হয়েছে।

১.১ MySQL বর্তমান তারিখ ও সময়: NOW() / CURRENT_TIMESTAMP

বর্তমান তারিখ + সময় (YYYY-MM-DD HH:MM:SS) ফেরত দেয়।

SELECT NOW();
SELECT CURRENT_TIMESTAMP;

উদাহরণ আউটপুট

2025-02-01 15:30:45
  • NOW() এবং CURRENT_TIMESTAMP সাধারণত একই ফলাফল দেয়।
  • উভয়ই বর্তমান তারিখ ও সময় ফেরত দেয়।
  • যদি মিলিসেকেন্ড দরকার হয়, নিচেরটি ব্যবহার করুন।
    SELECT NOW(3);
    

নোট (সাধারণ ভুলগুলো)

  • সার্ভারের সময় অঞ্চল সেটিংয়ের উপর নির্ভরশীল।
  • UTC পরিবেশে, জাপান সময়ের পরিবর্তে UTC পাওয়া যেতে পারে।
  • কুয়েরি চালানোর সময়, এটি মূলত একই সময় ফেরত দেয় (একই স্টেটমেন্টের মধ্যে স্থির)।

১.২ MySQL বর্তমান তারিখ: CURDATE()

শুধুমাত্র তারিখ (সময় নয়) ফেরত দেয়।

SELECT CURDATE();

উদাহরণ আউটপুট

2025-02-01

ব্যবহারিক ক্ষেত্রসমূহ

  • আজকের ডেটা কুয়েরি করা
  • তারিখ তুলনা (যেমন, শুধুমাত্র আজকের রেকর্ড ফিল্টার করা)

নোট

  • রিটার্ন ভ্যালুটি DATE টাইপের।
  • যখন সময়‑অনুপাত প্রক্রিয়াকরণ দরকার, তখন এটি উপযুক্ত নয়।

১.৩ MySQL বর্তমান সময়: CURTIME()

শুধুমাত্র সময় ফেরত দেয়।

SELECT CURTIME();

উদাহরণ আউটপুট

15:30:45

ব্যবহারিক ক্ষেত্রসমূহ

  • ব্যবসায়িক সময় যাচাই
  • সময় উইন্ডোর ভিত্তিতে শাখা লজিক

নোট

  • তারিখের তথ্য অন্তর্ভুক্ত নয়।
  • DATE‑টাইপের কলামের সঙ্গে তুলনা করা যায় না।

১.৪ MySQL বর্তমান UTC সময়: UTC_TIMESTAMP()

সার্ভারের সময় অঞ্চল সেটিং যাই হোক না কেন, UTC (Coordinated Universal Time) সময় ফেরত দেয়।

SELECT UTC_TIMESTAMP();

উদাহরণ আউটপুট

2025-02-01 06:30:45

কখন ব্যবহার করবেন

  • গ্লোবাল সার্ভিস
  • লগকে ধারাবাহিকভাবে UTC‑তে সংরক্ষণ করা ডিজাইন

সাধারণ ভুলগুলো

  • NOW()‑এর সঙ্গে মিশিয়ে ব্যবহার করলে সময়ের পার্থক্য হয়
  • যদি অ্যাপ্লিকেশন JST ধরে নেয়, তবে ৯ ঘণ্টার পার্থক্য দেখা যাবে

১.৫ MySQL বর্তমান সময় মিলিসেকেন্ড সহ: NOW(3) / CURRENT_TIMESTAMP(3)

MySQL 5.6 এবং পরের সংস্করণে ভগ্নাংশ সেকেন্ড সমর্থন করে।

SELECT NOW(3);
SELECT CURRENT_TIMESTAMP(3);

উদাহরণ আউটপুট

2025-02-01 15:30:45.123

সংরক্ষণের জন্য নোট

আপনার কলামটিকেও ভগ্নাংশ সেকেন্ড সমর্থন করতে হবে।

DATETIME(3)
TIMESTAMP(3)

যদি অ‑সাপোর্টেড কলামে সংরক্ষণ করেন, ভগ্নাংশ অংশ কেটে ফেলা হবে।

১.৬ উদ্দেশ্য অনুযায়ী দ্রুত চিট শিট

PurposeSQL
Current date and timeSELECT NOW();
Get UTCSELECT UTC_TIMESTAMP();
Date onlySELECT CURDATE();
Time onlySELECT CURTIME();
Get millisecondsSELECT NOW(3);

সাধারণ পিটফলসের সারাংশ

  • সময় অফসেট হয় কারণ আপনি সময় অঞ্চল যাচাই করেননি
  • NOW(3) ব্যবহার করছেন কিন্তু মিলিসেকেন্ড‑সক্ষম কলাম নেই
  • UTC এবং লোকাল সময় মিশিয়ে ব্যবহার
  • DATETIME এবং TIMESTAMP এর পার্থক্য না বোঝা

MySQL DATETIME と TIMESTAMP の違いを示した図。TIMESTAMPはUTC変換され、DATETIMEは変換されない。

MySQL‑এর DATETIME এবং TIMESTAMP এর পার্থক্য (সময় অঞ্চল রূপান্তর হয় কি না তুলনা)

২. MySQL‑এর NOW() এবং CURRENT_TIMESTAMP এর পার্থক্য

NOW() এবং CURRENT_TIMESTAMP দেখতে একই রকম, তবে কোথায় ব্যবহার করবেন এবং কীভাবে আচরণ করে তা ভুল বোঝা সহজেই বাগের কারণ হতে পারে। এখানে আমরা পার্থক্য, সঠিক ব্যবহার এবং সাধারণ পিটফলসগুলো সংক্ষেপে উপস্থাপন করছি।

২.১ কোনটি ব্যবহার করবেন? (SELECT ব্যবহার / DEFAULT ব্যবহার)

■ SELECT‑এ বর্তমান তারিখ/সময় পুনরুদ্ধার করা

SELECT NOW();
SELECT CURRENT_TIMESTAMP;

সাধারণত, উভয়ই একই ফলাফল দেয়।

  • তারা সমতুল্য (সমার্থক)
  • রিটার্ন ভ্যালু DATETIME‑এর সমতুল্য
  • সময় অঞ্চল সেটিং দ্বারা প্রভাবিত

প্রায়োগিক টেকঅ্যাওয়ে

  • পাঠযোগ্যতা বাড়াতে → NOW()
  • স্ট্যান্ডার্ড SQL স্টাইল পছন্দ করলে → CURRENT_TIMESTAMP

■ কলামের ডিফল্ট মান সেট করা

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

এখানে মূল বিষয়টি হল:

ডিফল্ট মানের জন্য, সাধারণত CURRENT_TIMESTAMP ব্যবহার করা হয়।

কিছু পরিবেশে NOW() ও অনুমোদিত হয়, তবে আচরণ MySQL সংস্করণ এবং SQL মোডের উপর নির্ভর করে ভিন্ন হতে পারে। নিরাপদ পছন্দ হল CURRENT_TIMESTAMP

2.2 DEFAULT / ON UPDATE এর সঠিক ব্যবহার

যদি আপনি “updated at” টাইমস্ট্যাম্পটি স্বয়ংক্রিয়ভাবে আপডেট করতে চান:

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        ON UPDATE CURRENT_TIMESTAMP
);

আচরণ

  • INSERT-এ → created_at / updated_at এর জন্য বর্তমান সময় সেট করে
  • UPDATE-এ → শুধুমাত্র updated_at আপডেট করে

সাধারণ ভুলগুলো

  • DATETIME ব্যবহার করার সময় ভগ্নাংশ-সেকেন্ডের নির্ভুলতা মেলানো হয় না
  • একাধিক TIMESTAMP কলামের সাথে পুরনো MySQL সীমাবদ্ধতার সম্মুখীন হওয়া (MySQL 5.6 এবং তার আগের সংস্করণে সীমাবদ্ধতা ছিল)

2.3 NOW() এবং SYSDATE() এর পার্থক্য (গুরুত্বপূর্ণ)

SYSDATE() থেকে পার্থক্যটি সহজে মিস করা যায়।

SELECT NOW(), SYSDATE();

■ আচরণ পার্থক্য

  • NOW() → কুয়েরি শুরু সময়ে স্থির থাকে
  • SYSDATE() → কল করা মুহূর্তের সময় ফেরত দেয়

উদাহরণ:

SELECT NOW(), SLEEP(3), NOW();

NOW() একই মান ফেরত দেয়।

SELECT SYSDATE(), SLEEP(3), SYSDATE();

SYSDATE() ৩ সেকেন্ডের পার্থক্য দেখায়।

2.4 কোনটি ব্যবহার করা উচিত?

FunctionBehaviorRecommended use
NOW()Fixed within a queryLogging, consistency-focused
SYSDATE()Call-time valuePrecise real-time retrieval

কেন NOW() বাস্তব-জগতের সিস্টেমে প্রায়ই সুপারিশ করা হয়

  • একটি ট্রানজ্যাকশনের মধ্যে সামঞ্জস্য বজায় রাখে (একটি প্রক্রিয়া যা একাধিক SQL স্টেটমেন্ট একসাথে প্রক্রিয়া করে)
  • রেপ্লিকেশন পরিবেশে নিরাপদ

2.5 সাধারণ ভুল ধারণা এবং সমস্যাসমূহ

❌ “NOW() এবং CURRENT_TIMESTAMP একদম একই, তাই আপনাকে এ নিয়ে চিন্তা করতে হবে না।”

→ পার্থক্যগুলি ডিফল্ট বা আপডেট আচরণে প্রকাশ পেতে পারে, পরিবেশের উপর নির্ভর করে।

❌ “SYSDATE() বেশি সঠিক, তাই এটি সবসময় ভাল।”

→ এটি রেপ্লিকেশন পরিবেশে সমস্যার সৃষ্টি করতে পারে।

❌ সময় অঞ্চল যাচাই না করা

SHOW VARIABLES LIKE '%time_zone%';

যদি আপনি এটি যাচাই না করে ব্যবহার করেন, তবে সময়ের পার্থক্য পেতে পারেন।

2.6 ব্যবহারিক সেরা অনুশীলনগুলো

  • SELECT পুনরুদ্ধার → NOW()
  • কলামের ডিফল্ট → CURRENT_TIMESTAMP
  • স্বয়ংক্রিয় আপডেট → ON UPDATE CURRENT_TIMESTAMP
  • সামঞ্জস্য-কেন্দ্রিক → ডিফল্ট NOW()
  • UTC-ভিত্তিক নকশা → TIMESTAMP + UTC-তে সংরক্ষণ
  1. MySQL বর্তমান সময় ফরম্যাটিং (DATE_FORMAT / TIME_FORMAT)
    MySQL‑এ বর্তমান সময় পুনরুদ্ধার করার পরে, প্রদর্শনের ফরম্যাট পরিবর্তন করা খুবই সাধারণ।
    সার্চ ইন্টেন্ট “MySQL current time format” এর জন্য সবচেয়ে গুরুত্বপূর্ণ ফাংশনটি হল DATE_FORMAT()

3.1 MySQL datetime ফরম্যাটিং: DATE_FORMAT(NOW(), …)

মৌলিক সিনট্যাক্স:

sql
SELECT DATE_FORMAT(target_datetime, 'format_string');

উদাহরণ: বর্তমান সময় ফরম্যাট করা

sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

উদাহরণ আউটপুট

2025-02-01 15:30:45

সাধারণভাবে ব্যবহৃত ফরম্যাট স্পেসিফায়ার

স্পেসিফায়ারঅর্থউদাহরণ
%Yবছর (৪ অঙ্ক)2025
%mমাস (২ অঙ্ক)02
%dদিন (২ অঙ্ক)01
%Hঘন্টা (২৪‑ঘণ্টা)15
%hঘন্টা (১২‑ঘণ্টা)03
%iমিনিট30
%sসেকেন্ড45
%pAM/PMPM

3.2 জাপানি‑স্টাইল বা 12‑ঘণ্টা ফরম্যাটে রূপান্তর

■ জাপানি‑স্টাইল ফরম্যাট

sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');

উদাহরণ আউটপুট:

2025-02-01 15:30

■ 12‑ঘণ্টা ফরম্যাট + AM/PM

sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s %p');

উদাহরণ আউটপুট:

2025-02-01 03:30:45 PM

3.3 MySQL কেবল‑সময় ফরম্যাটিং: TIME_FORMAT()

TIME টাইপের ডেটার জন্য বিশেষভাবে তৈরি ফরম্যাটিং ফাংশন।

sql
SELECT TIME_FORMAT(CURTIME(), '%H:%i');

উদাহরণ আউটপুট:

15:30

নোট
TIME_FORMAT() শুধুমাত্র TIME টাইপের জন্য।
DATETIME এর জন্য DATE_FORMAT() ব্যবহার করুন।

3.4 স্ট্রিং → datetime রূপান্তর: STR_TO_DATE()

স্ট্রিং ডেটাকে datetime টাইপে রূপান্তর করতে:

sql
SELECT STR_TO_DATE('2025-02-01 15:30:45', '%Y-%m-%d %H:%i:%s');

উদাহরণ আউটপুট:

2025-02-01 15:30:45

সাধারণ ভুল
– ফরম্যাট মেলেনি → NULL রিটার্ন হয়।
%m এবং %c (শূন্য‑প্যাডেড বনাম নন‑শূন্য‑প্যাডেড মাস) গুলোর গুলিয়ে ফেলা।

3.5 প্রোডাকশনে গুরুত্বপূর্ণ বিষয়গুলো

❌ ফরম্যাটিং করার পরে তুলনা করবেন না
খারাপ উদাহরণ:

sql
WHERE DATE_FORMAT(created_at, '%Y-%m-%d') = '2025-02-01';

এটি সুপারিশ করা হয় না কারণ ইনডেক্স অকার্যকর হয়ে যায় (কোয়েরি পারফরম্যান্স হ্রাস পায়)

সুপারিশ:

sql
WHERE created_at >= '2025-02-01' AND created_at < '2025-02-02';

❌ ডেটাবেস সাইডে অতিরিক্ত ফরম্যাটিং করবেন না
ওয়েব অ্যাপ্লিকেশনে, প্রদর্শনের জন্য ফরম্যাটিং সাধারণত অ্যাপ্লিকেশন সাইডে করা বেশি নমনীয়।
ডেটাবেসের কাজ হওয়া উচিত “সংরক্ষণ ও গণনা”।

3.6 মিলিসেকেন্ড সহ ফরম্যাটিং

sql
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f');

%f মাইক্রোসেকেন্ড (৬ অঙ্ক) নির্দেশ করে।

নোট
– কলামটি যদি DATETIME(3) বা অনুরূপ না হয়, তবে ভগ্নাংশ অংশ কেটে ফেলা হবে।
– MySQL 5.6 এবং পরের সংস্করণে উপলব্ধ।

3.7 ফরম্যাটিং উদ্দেশ্য অনুযায়ী সারাংশ

উদ্দেশ্যফাংশন
প্রদর্শনের ফরম্যাট পরিবর্তনDATE_FORMAT
কেবল‑সময় ফরম্যাটTIME_FORMAT
স্ট্রিং → datetime রূপান্তরSTR_TO_DATE
মিলিসেকেন্ড প্রদর্শন%f
  1. MySQL তারিখ ও সময় যোগ/বিয়োগ (DATE_ADD / DATE_SUB)
    আপনি যদি বর্তমান সময় পুনরুদ্ধার করতে পারেন, তবু প্রোডাকশনে “X দিন পরে” বা “X ঘন্টা আগে” ইত্যাদি তারিখ/সময় গণনা না করলে তা কার্যকরভাবে ব্যবহার করা যায় না
    এখানে আমরা DATE_ADD() এবং DATE_SUB() কীভাবে MySQL‑এ বর্তমান সময়ের সঙ্গে ব্যবহার করা যায় তা ব্যাখ্যা করছি।

4.1 MySQL datetime যোগ: DATE_ADD()

মৌলিক সিনট্যাক্স:

sql
SELECT DATE_ADD(base_datetime, INTERVAL value unit);

উদাহরণ: এখন থেকে ৭ দিন পরে

sql
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);

উদাহরণ: এখন থেকে ২ ঘন্টা পরে

sql
SELECT DATE_ADD(NOW(), INTERVAL 2 HOUR);

সাধারণভাবে ব্যবহৃত ইউনিট

ইউনিটঅর্থ
SECONDসেকেন্ড
MINUTEমিনিট
HOURঘন্টা
DAYদিন
MONTHমাস
YEARবছর

4.2 MySQL datetime বিয়োগ: DATE_SUB()

মৌলিক সিনট্যাক্স:

sql
SELECT DATE_SUB(base_datetime, INTERVAL value unit);

উদাহরণ: ৩০ দিন আগে

sql
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);

উদাহরণ: ১ ঘন্টা আগে

sql
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR);

ব্যবহারিক ক্ষেত্রসমূহ
– মেয়াদ শেষ হওয়া চেক করা
– পুরনো লগ মুছে ফেলা
– সাম্প্রতিক ডেটা বের করা

4.3 প্রোডাকশনে সাধারণ প্যাটার্ন

■ শেষ ২৪ ঘন্টার ডেটা পুনরুদ্ধার

sql
SELECT * FROM logs WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);

■ ৭ দিন পরে ডেডলাইন সেট করা

sql
INSERT INTO tasks (deadline) VALUES (DATE_ADD(NOW(), INTERVAL 7 DAY));

4.4 সাধারণ ভুল এবং সতর্কতা
❌ কলামগুলিতে ফাংশন প্রয়োগ করা
খারাপ উদাহরণ:
WHERE DATE(created_at) = CURDATE();
এটি ইনডেক্স নিষ্ক্রিয় করে (কোয়েরি পারফরম্যান্স অপ্টিমাইজেশন)।
প্রস্তাবিত:
WHERE created_at >= CURDATE() AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
❌ সময় অঞ্চল উপেক্ষা করা
NOW() সার্ভারের সময় অঞ্চলের উপর ভিত্তি করে
যদি আপনি UTC-তে সংরক্ষণ করেন, তবে ভিত্তি হিসেবে UTC_TIMESTAMP() ব্যবহার করুন
উদাহরণ:
SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL 1 DAY);
❌ মাস যোগ করার সমস্যাসমূহ
SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);
→ মাসের শেষের সমন্বয়ের কারণে, তারিখ পরিবর্তিত হতে পারে।
(ফলাফল পরিবেশের উপর নির্ভর করে 2025-02-28 হতে পারে।)
মাস-ভিত্তিক গণনা ব্যবহার করার আগে স্পেসিফিকেশনটি বুঝে নিন।
4.5 মিলিসেকেন্ড সহ যোগ
SELECT DATE_ADD(NOW(3), INTERVAL 500 MILLISECOND);
※ MySQL সরাসরি MILLISECOND সমর্থন করে না।
মাইক্রোসেকেন্ডে নির্দিষ্ট করুন:
SELECT DATE_ADD(NOW(3), INTERVAL 500000 MICROSECOND);
4.6 সর্বোত্তম অনুশীলন
আপনার ভিত্তি হিসেবে NOW() অথবা UTC_TIMESTAMP() মানক করুন
WHERE ক্লজে কলামগুলিতে ফাংশন প্রয়োগ করবেন না
মাস-ভিত্তিক যোগের আচরণ বুঝুন
যদি নির্ভুলতা প্রয়োজন হয়, তবে DATETIME(3) অথবা তার উপরে ব্যবহার করুন

৫. MySQL-এ তারিখ/সময় পার্থক্য গণনা (DATEDIFF / TIMESTAMPDIFF)

প্রোডাকশন সিস্টেমে, শুধুমাত্র বর্তমান সময় পুনরুদ্ধার করা যথেষ্ট নয়। আপনাকে প্রায়ই কত দিন কেটেছে অথবা কত ঘন্টা বাকি আছে তা গণনা করতে হয়।

৫.১ তারিখ পার্থক্য গণনা: DATEDIFF()

DATEDIFF() দুটি তারিখের মধ্যে দিনের পার্থক্য গণনা করে।

SELECT DATEDIFF('2025-02-10', '2025-02-01');

ফলাফল

9

মূল বিষয়গুলো

  • শুধুমাত্র দিন পার্থক্য ফেরত দেয়
  • সময়ের অংশ উপেক্ষা করা হয়
  • ফলাফল নেগেটিভ হতে পারে

উদাহরণ: সৃষ্টির পর থেকে কত দিন হয়েছে গণনা করুন

SELECT DATEDIFF(NOW(), created_at)
FROM users;

৫.২ ইউনিট অনুযায়ী পার্থক্য গণনা: TIMESTAMPDIFF()

TIMESTAMPDIFF() আপনাকে ইউনিট নির্ধারণের অনুমতি দেয়।

SELECT TIMESTAMPDIFF(unit, start_datetime, end_datetime);

উদাহরণ: ঘন্টার পার্থক্য

SELECT TIMESTAMPDIFF(HOUR, '2025-02-01 10:00:00', '2025-02-01 15:00:00');

ফলাফল

5

সাধারণ ইউনিটগুলো

UnitMeaning
SECONDSeconds
MINUTEMinutes
HOURHours
DAYDays
MONTHMonths
YEARYears

উদাহরণ: লগইন থেকে কত মিনিট হয়েছে গণনা করুন

SELECT TIMESTAMPDIFF(MINUTE, login_at, NOW())
FROM users;

৫.৩ প্রোডাকশন ব্যবহারিক উদাহরণ

  • সেশন টাইমআউট চেক
  • সাবস্ক্রিপশন মেয়াদ শেষ হওয়া চেক
  • লগে অতিবাহিত সময় গণনা
  • রেট লিমিটিং লজিক

৫.৪ সাধারণ ভুল

❌ সময়ের নির্ভুলতা প্রয়োজন হলে DATEDIFF ব্যবহার করা

DATEDIFF() ঘন্টা ও মিনিট উপেক্ষা করে।

❌ আর্গুমেন্টের ক্রম উল্টে দেওয়া

ক্রমটি হল:

TIMESTAMPDIFF(unit, start, end)

উল্টে দিলে, ফলাফল নেগেটিভ হয়ে যায়।

❌ সময় অঞ্চল উপেক্ষা করা

যদি UTC এবং স্থানীয় সময় মিশ্রিত করা হয়, পার্থক্য ভুল হতে পারে।

৫.৫ সর্বোত্তম অনুশীলন

  • সময়ের নির্ভুলতা গুরুত্বপূর্ণ হলে TIMESTAMPDIFF() ব্যবহার করুন
  • সহজ দিন গণনার জন্য DATEDIFF() ব্যবহার করুন
  • সময় অঞ্চলের সঙ্গতি নিশ্চিত করুন
  • বিতরণকৃত সিস্টেমে UTC মানক করুন

৬. বর্তমান সময় ব্যবহার করে তারিখ রেঞ্জ কুয়েরি

সর্বাধিক সাধারণ বাস্তব‑জগতের প্রয়োজনগুলোর একটি হল নির্দিষ্ট সময় রেঞ্জের মধ্যে রেকর্ড পুনরুদ্ধার করা, যেমন:

  • আজকের রেকর্ড
  • শেষ ৭ দিন
  • শেষ ২৪ ঘন্টা
  • এই মাস

৬.১ আজকের রেকর্ড পুনরুদ্ধার (ইনডেক্স-বন্ধুত্বপূর্ণ)

SELECT *
FROM logs
WHERE created_at >= CURDATE()
  AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

কেন এটি সঠিক

  • কলামে কোনো ফাংশন প্রয়োগ করা হয়নি
  • ইনডেক্স ব্যবহারযোগ্য থাকে
  • কার্যকর রেঞ্জ কুয়েরি

৬.২ শেষ ৭ দিন

SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY);

৬.৩ শেষ ২৪ ঘন্টা

SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);

৬.৪ এই মাস

SELECT *
FROM logs
WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
  AND created_at < DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH);

প্রোডাকশন সিস্টেমে, প্রায়ই অ্যাপ্লিকেশন সাইডে সীমানা গণনা করা এবং সেগুলোকে প্যারামিটার হিসেবে পাস করা ভাল হয়।

৬.৫ সাধারণ পারফরম্যান্স ভুল

❌ ইনডেক্সড কলামগুলিতে ফাংশন প্রয়োগ করা

WHERE DATE(created_at) = CURDATE();

এটি ইনডেক্স ব্যবহারের বাধা দেয় এবং সম্পূর্ণ টেবিল স্ক্যানের কারণ হয়।

❌ অবহেলাপূর্ণভাবে BETWEEN ব্যবহার করা

BETWEEN অন্তর্ভুক্তিমূলক এবং এক সেকেন্ডের পার্থক্যজনিত সমস্যার কারণ হতে পারে।

৬.৬ সেরা অনুশীলনের সারাংশ

  • তারিখ ফিল্টারিংয়ের জন্য সর্বদা রেঞ্জ শর্ত ব্যবহার করুন
  • ইনডেক্সড কলামগুলিতে ফাংশন প্রয়োগ করা এড়িয়ে চলুন
  • গ্লোবাল সিস্টেমে UTC স্টোরেজকে অগ্রাধিকার দিন
  • টাইম জোন অনুমান সম্পর্কে স্পষ্ট থাকুন