MySQL में दिन और महीने के आधार पर तिथि फ़िल्टरिंग
वर्ष की परवाह किए बिना विशिष्ट दिन और महीने पर पड़ने वाली तिथियों को ढूंढने के लिए (जैसे वर्षगाँठ, जन्मदिन), MONTH() और DAY() फ़ंक्शन का उपयोग करके तिथि भागों की तुलना करें।
उदाहरण: आज की तिथि से मेल खाने वाली वर्षगाँठ ढूंढना
पहले एक वर्षगाँठ तिथि टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable1429 (
-> AnniversaryDate DATE
-> );
mysql> INSERT INTO DemoTable1429 VALUES
-> ('2019-09-29'), ('2018-09-27'),
-> ('2016-09-28'), ('2015-09-29');
Query OK, 4 rows affected (0.09 sec)
mysql> SELECT * FROM DemoTable1429;
+-----------------+
| AnniversaryDate |
+-----------------+
| 2019-09-29 |
| 2018-09-27 |
| 2016-09-28 |
| 2015-09-29 |
+-----------------+
4 rows in set (0.00 sec)
mysql> SELECT CURDATE();
+------------+
| curdate() |
+------------+
| 2019-09-29 |
+------------+
1 row in set (0.00 sec)
दिन और महीने के मिलान के साथ क्वेरी
mysql> SELECT * FROM DemoTable1429
-> WHERE MONTH(AnniversaryDate) = MONTH(CURDATE())
-> AND DAY(AnniversaryDate) = DAY(CURDATE());
परिणाम
+-----------------+ | AnniversaryDate | +-----------------+ | 2019-09-29 | | 2015-09-29 | +-----------------+ 2 rows in set (0.00 sec)
प्रदर्शन विचार
MONTH(col)) इंडेक्स उपयोग को रोकता है। बड़े टेबल के लिए:
- गणना किए गए कॉलम जोड़ें:
month_col INT GENERATED ALWAYS AS (MONTH(AnniversaryDate)) - उन गणना किए गए कॉलम पर इंडेक्स बनाएं
- या दिन/महीने संयोजनों के लिए एक लुकअप टेबल का उपयोग करें
वैकल्पिक दृष्टिकोण
-- DATE_FORMAT का उपयोग (स्ट्रिंग तुलना) SELECT * FROM DemoTable1429 WHERE DATE_FORMAT(AnniversaryDate, '%m-%d') = DATE_FORMAT(CURDATE(), '%m-%d');