DATE_FORMAT() फ़ंक्शन का उपयोग
MySQL में किसी दिनांक/डेटाटाइम कॉलम से **प्रत्येक महीने का पहला दिन** (YYYY-MM-01 फॉर्मेट में) प्राप्त करने के लिए DATE_FORMAT() फ़ंक्शन का उपयोग करें।
सिंटैक्स
SELECT DATE_FORMAT(yourDateTimeColumn, '%Y-%m-01') AS FirstDayOfMonth
FROM yourTableName;
व्यावहारिक उदाहरण
1. टेबल बनाएं और विभिन्न महीनों की दिनांक डालें
mysql> CREATE TABLE GetFirstDayOfMonth (
-> DueDatetime DATETIME
-> );
Query OK, 0 rows affected (1.16 sec)
mysql> INSERT INTO GetFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL 3 MONTH));
mysql> INSERT INTO GetFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -3 MONTH));
mysql> INSERT INTO GetFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -2 MONTH));
mysql> INSERT INTO GetFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -1 MONTH));
mysql> INSERT INTO GetFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -4 MONTH));
2. डेटा देखें
mysql> SELECT * FROM GetFirstDayOfMonth;
+---------------------+
| DueDatetime |
+---------------------+
| 2019-03-20 12:32:06 |
| 2018-09-20 12:32:16 |
| 2018-10-20 12:32:22 |
| 2018-11-20 12:32:28 |
| 2018-08-20 12:32:33 |
+---------------------+
5 rows in set (0.00 sec)
3. प्रत्येक महीने का पहला दिन प्राप्त करें
mysql> SELECT DATE_FORMAT(DueDatetime, '%Y-%m-01') AS DateDemo
-> FROM GetFirstDayOfMonth;
+------------+
| DateDemo |
+------------+
| 2019-03-01 |
| 2018-09-01 |
| 2018-10-01 |
| 2018-11-01 |
| 2018-08-01 |
+------------+
5 rows in set (0.00 sec)
वैकल्पिक विधियाँ
1. DATE() + INTERVAL (दिन घटाकर)
SELECT DATE(DueDatetime) - INTERVAL (DAY(DueDatetime) - 1) DAY
FROM GetFirstDayOfMonth;
2. STR_TO_DATE + DATE_FORMAT (स्ट्रिंग कॉलम के लिए)
SELECT DATE_FORMAT(STR_TO_DATE(dateString, '%Y-%m-%d'), '%Y-%m-01') ...
3. DATE_SUB (महीने की शुरुआत)
SELECT DATE_SUB(DueDatetime, INTERVAL DAY(DueDatetime)-1 DAY) ...
उपयोग केस
- मासिक रिपोर्ट समूहीकरण:
GROUP BY DATE_FORMAT(date, '%Y-%m') - महीने की सीमा:
WHERE date >= '2023-01-01' AND date < '2023-02-01' - कैलेंडर जनरेशन
- बिलिंग चक्र गणना
प्रदर्शन टिप
बड़े टेबल्स पर DATE_FORMAT इंडेक्स उपयोग नहीं कर सकता। रेंज क्वेरी के लिए:
WHERE DueDatetime >= '2023-01-01' AND DueDatetime < '2023-02-01'
या फंक्शनल इंडेक्स (MySQL 8.0+):
CREATE INDEX idx_month_start ON GetFirstDayOfMonth ((DATE_FORMAT(DueDatetime, '%Y-%m-01')));