MySQL में DATEDIFF() का उपयोग करके तिथि अंतर गणना
MySQL में DATEDIFF() फ़ंक्शन दो तिथियों के बीच दिनों का अंतर लौटाता है। वर्तमान तिथि के लिए CURDATE() और स्ट्रिंग को तिथि में बदलने के लिए STR_TO_DATE() का उपयोग करें।
वर्तमान तिथि जांचना
mysql> SELECT CURDATE();
+------------+
| curdate() |
+------------+
| 2019-10-26 |
+------------+
1 row in set (0.00 sec)
टेबल बनाना (जॉइनिंग तिथि VARCHAR के रूप में संग्रहीत)
mysql> CREATE TABLE DemoTable (
-> JoiningDate VARCHAR(40)
-> );
Query OK, 0 rows affected (0.61 sec)
विभिन्न तिथि प्रारूपों में डेटा डालना
mysql> INSERT INTO DemoTable VALUES ('10/10/1998');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES ('31/12/2010');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO DemoTable VALUES ('01/01/2017');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable VALUES ('25/10/2019');
Query OK, 1 row affected (0.14 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+-------------+
| JoiningDate |
+-------------+
| 10/10/1998 |
| 31/12/2010 |
| 01/01/2017 |
| 25/10/2019 |
+-------------+
4 rows in set (0.00 sec)
तिथि अंतर गणना करने का क्वेरी
mysql> SELECT DATEDIFF(CURDATE(), STR_TO_DATE(JoiningDate, '%d/%m/%Y'))
-> FROM DemoTable;
परिणाम
+---------------------------------------------------------+
| datediff(curdate(),str_to_date(JoiningDate,'%d/%m/%Y')) |
+---------------------------------------------------------+
| 7686 |
| 3221 |
| 1028 |
| 1 |
+---------------------------------------------------------+
4 rows in set (0.00 sec)
फ़ंक्शन व्याख्या
- STR_TO_DATE(JoiningDate, '%d/%m/%Y'): 'dd/mm/yyyy' प्रारूप में स्ट्रिंग को DATE मान में बदलता है
- CURDATE(): वर्तमान तिथि लौटाता है
- DATEDIFF(date1, date2): date1 - date2 के दिनों में अंतर लौटाता है
तिथि प्रारूप निर्देशक
| निर्देशक | अर्थ | उदाहरण |
|---|---|---|
| %d | दिन (00-31) | 25 |
| %m | महीना (00-12) | 10 |
| %Y | 4-अंकीय वर्ष | 2019 |
| %y | 2-अंकीय वर्ष | 19 |
अन्य उपयोगी तिथि अंतर फ़ंक्शन
-- महीनों में अंतर
SELECT TIMESTAMPDIFF(MONTH, STR_TO_DATE(JoiningDate, '%d/%m/%Y'), CURDATE()) FROM DemoTable;
-- वर्षों में अंतर
SELECT TIMESTAMPDIFF(YEAR, STR_TO_DATE(JoiningDate, '%d/%m/%Y'), CURDATE()) FROM DemoTable;
-- पूर्ण अवधि (वर्ष, महीने, दिन)
SELECT
TIMESTAMPDIFF(YEAR, join_date, CURDATE()) AS years,
TIMESTAMPDIFF(MONTH, join_date, CURDATE()) % 12 AS months,
TIMESTAMPDIFF(DAY, join_date, CURDATE()) % 30 AS days
FROM (
SELECT STR_TO_DATE(JoiningDate, '%d/%m/%Y') AS join_date FROM DemoTable
) AS t;
सर्वोत्तम अभ्यास
- तिथियों को VARCHAR के बजाय DATE/DATETIME कॉलम में संग्रहीत करें
- तिथि प्रारूप स्ट्रिंग्स के साथ सुसंगत रहें
- अंतर्राष्ट्रीयकरण के लिए ISO 8601 प्रारूप (YYYY-MM-DD) का उपयोग करने पर विचार करें