MySQL: सेकंड में दो टाइमस्टैम्प के बीच अंतर कैसे प्राप्त करें


97

क्या कोई ऐसा तरीका है जिससे मैं MySQL में एक क्वेरी बना सकता हूं जो मुझे सेकंड में दो टाइमस्टैम्प के बीच का अंतर देगा, या मुझे PHP में ऐसा करने की आवश्यकता होगी? और यदि हां, तो मैं ऐसा करने के बारे में कैसे जाऊंगा?

जवाबों:


176

आप निम्नानुसार TIMEDIFF()और TIME_TO_SEC()कार्यों का उपयोग कर सकते हैं :

SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
|   60 |
+------+
1 row in set (0.00 sec)

आप UNIX_TIMESTAMP()फ़ंक्शन का उपयोग किसी अन्य उत्तर में सुझाए गए @Amber के रूप में भी कर सकते हैं :

SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') - 
       UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
|   60 |
+------+
1 row in set (0.00 sec)

यदि आप TIMESTAMPडेटा प्रकार का उपयोग कर रहे हैं , तो मुझे लगता है कि UNIX_TIMESTAMP()समाधान थोड़ा तेज होगा, क्योंकि TIMESTAMPमान पहले से ही एक पूर्णांक के रूप में संग्रहीत हैं जो कि युग ( स्रोत ) के बाद से सेकंड की संख्या का प्रतिनिधित्व करते हैं । डॉक्स का हवाला देते हुए :

जब UNIX_TIMESTAMP()किसी TIMESTAMPस्तंभ पर उपयोग किया जाता है , तो फ़ंक्शन सीधे आंतरिक टाइमस्टैम्प मान वापस करता है, जिसका कोई निहित "स्ट्रिंग-टू-यूनिक्स-टाइमस्टैम्प" रूपांतरण नहीं है।

ध्यान रखें कि TIMEDIFF() डेटा प्रकार वापस करेंTIMETIMEमान '-838: 59: 59' से लेकर '838: 59: 59' तक हो सकते हैं (लगभग 34.96 दिन)


11
आप TIMESTAMPDIFF का उपयोग भी कर सकते हैं , जो इसे एकल फ़ंक्शन में करता है - बस unitपैरामीटर को सेट करें SECOND
माइक

प्रदर्शन स्पष्टीकरण के लिए +1। मैं UNIX_TIMESTAMP () का उपयोग नहीं कर रहा था क्योंकि मुझे लगा कि इसमें अधिक समय लगेगा।
elcool

51

कैसे "TIMESTAMPDIFF" के बारे में:

SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff


यदि आपका दिनांक स्तंभ किसी अन्य रूप में है तो YYYY-MM-DD यह करने की कोशिश करता है: str_to_date(date_column, '%m/%d/%Y')स्तंभ के लिए TIMESTAMPDIFF फ़ंक्शन के भीतर जिसे इसे सही करने की आवश्यकता है।
अधिक

यह मेरे लिए एक बेहतर उत्तर है क्योंकि यह TIME_TO_SECअधिकतम 3020399मूल्य पर है जबकि यह सही मूल्य देता है।
बिलिन्नाह

21
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)

यदि आप एक अहस्ताक्षरित अंतर चाहते हैं, ABS()तो अभिव्यक्ति के चारों ओर जोड़ें ।

वैकल्पिक रूप से, आप TIMEDIFF(ts1, ts2)समय परिणाम को सेकंड के साथ परिवर्तित कर सकते हैं TIME_TO_SEC()


11

ध्यान दें कि TIMEDIFF()समाधान केवल काम करता है जब datetimesकर रहे हैं की तुलना में कम 35 दिनों के अलावा! TIMEDIFF()एक TIMEडेटा स्वरूप देता है , और TIME का अधिकतम मूल्य 838: 59: 59 घंटे (= 34,96 दिन) है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.