परिचय
MySQL में MONTH() और YEAR() फंक्शन्स का उपयोग करके तिथि से महीना और वर्ष निकालकर, वर्तमान महीने/वर्ष के रिकॉर्ड फ़िल्टर करके योग निकाला जा सकता है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable1562 (
-> VoucherValue INT,
-> RechargeDate DATE
-> );
Query OK, 0 rows affected (1.40 sec)
mysql> INSERT INTO DemoTable1562 VALUES(149, '2019-10-21');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable1562 VALUES(199, '2019-10-13');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable1562 VALUES(399, '2018-10-13');
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO DemoTable1562 VALUES(450, '2019-10-13');
Query OK, 1 row affected (0.20 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1562;
आउटपुट:
+--------------+--------------+
| VoucherValue | RechargeDate |
+--------------+--------------+
| 149 | 2019-10-21 |
| 199 | 2019-10-13 |
| 399 | 2018-10-13 |
| 450 | 2019-10-13 |
+--------------+--------------+
4 rows in set (0.00 sec)
वर्तमान तिथि
mysql> SELECT CURDATE();
+------------+
| CURDATE() |
+------------+
| 2019-10-13 |
+------------+
1 row in set (0.00 sec)
वर्तमान महीने और वर्ष का कुल वाउचर मूल्य
mysql> SELECT SUM(VoucherValue) FROM DemoTable1562
-> WHERE MONTH(RechargeDate) = MONTH(CURDATE())
-> AND YEAR(RechargeDate) = YEAR(CURDATE());
परिणाम
+-------------------+
| SUM(VoucherValue) |
+-------------------+
| 798 |
+-------------------+
1 row in set (0.00 sec)
व्याख्या
MONTH(RechargeDate) = MONTH(CURDATE())- समान महीना (अक्टूबर = 10)YEAR(RechargeDate) = YEAR(CURDATE())- समान वर्ष (2019)- दोनों शर्तें मिलकर "इस महीने" को परिभाषित करती हैं
- मेल खाने वाले: 149 (21 अक्टूबर) + 199 (13 अक्टूबर) + 450 (13 अक्टूबर) = 798
- 399 (2018) बाहर है
बेहतर प्रदर्शन विकल्प: डेट रेंज
SELECT SUM(VoucherValue) FROM DemoTable1562
WHERE RechargeDate >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
AND RechargeDate < DATE_FORMAT(CURDATE(), '%Y-%m-01') + INTERVAL 1 MONTH;
लाभ:
- इंडेक्स उपयोग कर सकता है (सार्गेबल - SARGable)
- फंक्शन कॉल प्रति पंक्ति नहीं
- समय घटक वाली DATETIME कॉलम के लिए भी काम करता है
साल की शुरुआत से (YTD)
SELECT SUM(VoucherValue) FROM DemoTable1562
WHERE YEAR(RechargeDate) = YEAR(CURDATE());
या डेट रेंज के साथ:
WHERE RechargeDate >= DATE_FORMAT(CURDATE(), '%Y-01-01')
AND RechargeDate < DATE_FORMAT(CURDATE(), '%Y-01-01') + INTERVAL 1 YEAR
डेट रेंज दृष्टिकोण उत्पादन क्वेरीज के लिए अनुशंसित है।