2010-03-30 13 views
41

मैं दिनों में दो टाइमस्टैम्प के बीच अंतर कैसे प्राप्त कर सकता हूं? क्या मुझे इसके लिए डेटाटाइम कॉलम का उपयोग करना चाहिए? दिनों में दो टाइमस्टैम्प के बीच MySQL अंतर?


मैंने अपना कॉलम डेटाटाइम पर स्विच किया। सरल घटाव मुझे दिनों में परिणाम देने के लिए प्रतीत नहीं होता है।

mysql> SELECT NOW(), last_confirmation_attempt, NOW() - last_confirmation_attempt AS diff FROM DateClubs HAVING diff IS NOT NULL ; 
+---------------------+---------------------------+-----------------+ 
| NOW()    | last_confirmation_attempt | diff   | 
+---------------------+---------------------------+-----------------+ 
| 2010-03-30 10:52:31 | 2010-03-16 10:41:47  | 14001084.000000 | 
+---------------------+---------------------------+-----------------+ 
1 row in set (0.00 sec) 

मुझे नहीं लगता कि diff, सेकंड में है, क्योंकि जब मैं एक दिन (86,400) में सेकंड की संख्या से विभाजित diff, मैं एक sensical जवाब नहीं मिलता है:

mysql> SELECT NOW(), last_confirmation_attempt, (NOW() - last_confirmation_attempt)/86400 AS diff FROM DateClubs HAVING diff IS NOT NULL ; 
+---------------------+---------------------------+----------------+ 
| NOW()    | last_confirmation_attempt | diff   | 
+---------------------+---------------------------+----------------+ 
| 2010-03-30 10:58:58 | 2010-03-16 10:41:47  | 162.0568402778 | 
+---------------------+---------------------------+----------------+ 
1 row in set (0.00 sec) 
+0

इस समय आपके कॉलम/मूल्य क्या डेटाटाइप हैं? –

+0

मैं टाइमस्टैम्प का उपयोग कर रहा था, लेकिन मैंने अभी एक कॉलम को डेटाटाइम में बदल दिया। – user151841

उत्तर

92

यदि आप कॉलम में समय के हिस्से को अनदेखा करने में प्रसन्न हैं, तो DATEDIFF() आपको वह अंतर देगा जो आप दिनों में ढूंढ रहे हैं।

SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days; 
+------+ 
| days | 
+------+ 
| 17 | 
+------+ 
+5

मैं वर्तमान तारीख के बीच अंतर कैसे ढूंढ सकता हूं, इसके लिए मैं भी गुगल रहा था, इसलिए इसे यहां रहने दें: 'डेटाडिफ़ (CURDATE(),' 2015-04-18 ') '। – ivkremer

4
CREATE TABLE t (d1 timestamp, d2 timestamp); 

INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 05:00:00'); 
INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 13:00:00'); 
INSERT INTO t VALUES ('2010-03-11 00:00:00', '2010-03-30 13:00:00'); 
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-03-30 13:00:00'); 
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-04-01 13:00:00'); 

SELECT d2, d1, DATEDIFF(d2, d1) AS diff FROM t; 

+---------------------+---------------------+------+ 
| d2     | d1     | diff | 
+---------------------+---------------------+------+ 
| 2010-03-30 05:00:00 | 2010-03-11 12:00:00 | 19 | 
| 2010-03-30 13:00:00 | 2010-03-11 12:00:00 | 19 | 
| 2010-03-30 13:00:00 | 2010-03-11 00:00:00 | 19 | 
| 2010-03-30 13:00:00 | 2010-03-10 12:00:00 | 20 | 
| 2010-04-01 13:00:00 | 2010-03-10 12:00:00 | 22 | 
+---------------------+---------------------+------+ 
5 rows in set (0.00 sec) 
11

मैं जानता हूँ कि काफी पुराना है, लेकिन मैं सिर्फ यह की खातिर कहूँगा - मैं एक ही समस्या के लिए देख रहा था और यहाँ मिल गया है, लेकिन मैं दिन में अंतर की जरूरत है।

मैंने SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24 यूनिक्स_टिमस्टैम्प सेकंड में अंतर देता है, और फिर मैं बस मिनटों (सेकंड/60), घंटों (मिनट/60), दिन (घंटे/24) में विभाजित करता हूं।

+0

क्या यह ठीक से छलांग वर्ष संभालता है? – user151841

+1

हां, क्योंकि टाइमस्टैंप लीप वर्षों को संभालती है। टाइमस्टैम्प अंतर सेकेंड में दो तिथियों के बीच का अंतर देता है। यदि आप दिन तक विभाजित होते हैं, तो आप ठीक होते हैं (हर दिन हर दिन एक ही सेकेंड सेकेंड होता है)। – Enrico

+1

@ एनीरिको - सच नहीं है। कुछ दिनों में वर्ष के आधार पर अतिरिक्त दो या दो सेकंड होते हैं। वे 30 जून के मध्यरात्रि या 31 दिसंबर के मध्यरात्रि में होते हैं।वे छलांग के सेकंड हैं जो परमाणु घड़ी दूसरे बनाम औसत सौर दिन सेकंड के बीच बहाव के लिए समायोजित करते हैं। यदि आप यूनिक्स और एसक्यूएल कैलकुलेटर की जांच करते हैं, तो वे 62 सेकेंड मिनट की अनुमति देंगे जिसका मतलब है कि सेकंड के मान 0 से 61 तक हो सकते हैं। समायोजन दो सेकंड तक भी नकारात्मक हो सकता है, लेकिन ऐसा कभी नहीं हुआ है क्योंकि बहाव हमेशा सकारात्मक छलांग के सेकंड की आवश्यकता के लिए होता है। मानक 2 सेकंड तक की अनुमति देता है। – Jim

3

SELECT DATEDIFF(now(), '2013-06-20');

यहाँ DateDiff 'से की तारीख'

दो तर्क 'तक की तारीख', मैंने क्या किया है, अब() फ़ंक्शन का उपयोग कर लेता है, मैं नहीं मिल सकता है। 20-जून 2013 से आज तक के दिनों तक।

5

आप पूर्ण टाइमस्टैम्प प्रारूप में वापस जाने के लिए की तुलना में यह कोशिश करना चाहते हैं: -

SELECT TIMEDIFF(`call_end_time`, `call_start_time`) as diff from tablename; 

 diff 
    - - - 
    00:05:15 
3

की तरह वापसी आप दूसरे पर निर्भर लेखांकन दिनों में अंतर की जरूरत है:

चुनें TIMESTAMPDIFF (SECOND, '2010-09-21 21:40:36', '2010-10-08 18:23:13')/86400 एएस diff

16.8629 दिन वापस आ जाएगा।

0

मेरी तालिका से दिनों के रूप में DATEDIFF (max_date, min_date) चुनें। यह तब भी काम करता है जब कर्नल max_date और min_date स्ट्रिंग डेटा प्रकारों में हैं।

संबंधित मुद्दे