MySQL में DATE() और INTERVAL अंकगणित का उपयोग करके किसी दिनांक का अंतिम सेकंड (दिन का अंत: 23:59:59) प्राप्त किया जा सकता है।
तर्क
DATE(datetime)- समय भाग हटाकर केवल दिनांक (00:00:00)+ INTERVAL 1 DAY- अगले दिन की शुरुआत- INTERVAL 1 SECOND- 1 सेकंड घटाकर दिन का अंत
उदाहरण
तालिका बनाएं:
mysql> CREATE TABLE DemoTable (JoiningDatetime DATETIME, DueDatetime DATETIME);
mysql> INSERT INTO DemoTable(JoiningDatetime) VALUES ('2019-11-03 12:34:54'), ('2019-10-04 12:34:54');
क्वेरी: DueDatetime को दिन के अंत पर सेट करें
mysql> UPDATE DemoTable
->> SET DueDatetime = DATE(JoiningDatetime) + INTERVAL 1 DAY - INTERVAL 1 SECOND;
परिणाम
+---------------------+---------------------+
| JoiningDatetime | DueDatetime |
+---------------------+---------------------+
| 2019-11-03 12:34:54 | 2019-11-03 23:59:59 |
| 2019-10-04 12:34:54 | 2019-10-04 23:59:59 |
+---------------------+---------------------+
विकल्प: TIMESTAMPADD
SET DueDatetime = TIMESTAMPADD(SECOND, -1, DATE_ADD(DATE(JoiningDatetime), INTERVAL 1 DAY));
MySQL 8.0+ विकल्प
-- दिन की अंतिम माइक्रोसेकंड (अधिक सटीक)
SET DueDatetime = DATE(JoiningDatetime) + INTERVAL 1 DAY - INTERVAL 1 MICROSECOND;
उपयोग केस
- दिन की सीमा क्वेरी:
WHERE dt >= '2019-11-03' AND dt <= '2019-11-03 23:59:59' - रिपोर्टिंग अवधि समाप्ति
- डेडलाइन सेट करना
बेहतर पैटर्न: आधी-खुली रेंज
WHERE dt >= '2019-11-03' AND dt < '2019-11-04'
-- अंतिम सेकंड की गणना की आवश्यकता नहीं, इंडेक्स-अनुकूल
सिफारिश: अंतिम सेकंड की गणना के बजाय आधी-खुली रेंज [start, end) उपयोग करें।