Mysql पर दो तिथियों के बीच अंतर के दिनों की संख्या कैसे प्राप्त करें?


162

मुझे MySQL पर कुछ तारीखों के भीतर निहित दिनों की संख्या प्राप्त करने की आवश्यकता है।

उदाहरण के लिए:

  • चेक इन डेट है 12-04-2010
  • जाने की तिथि 15-04-2010

दिन का अंतर 3 होगा

जवाबों:


261

DatedIFF फ़ंक्शन के बारे में क्या ?

मैनुअल के पृष्ठ का हवाला देते हुए:

DatedIFF () रिटर्न expr1 - expr2 एक दिन से दूसरी तारीख तक के दिनों में एक मूल्य के रूप में व्यक्त किया गया। expr1 और expr2 तारीख या तारीख और समय के भाव हैं। गणना में केवल मूल्यों के दिनांक भागों का उपयोग किया जाता है


आपके मामले में, आप उपयोग करेंगे:

mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
|                                    3 | 
+--------------------------------------+
1 row in set (0,00 sec)

लेकिन ध्यान दें कि तारीखें लिखी जानी चाहिए YYYY-MM-DD, और DD-MM-YYYYजैसे आप पोस्ट नहीं करते हैं


हाँ, जब मैंने प्रश्न किया तो मैं तारीख प्रारूप के बारे में भूल गया था, धन्यवाद
ज्ञापन

4
PS YYYY-MM-DD आईएसओ 8601 मानक है, इसलिए सभी को इसका उपयोग करना चाहिए। बहुत व्यावहारिक।
अर्नेस्टस स्टैंकेविसियस

4
नोट : पहला तर्क datediff()विधि के लिए दूसरे तर्क से अधिक होना चाहिए , अन्यथा यह नकारात्मक मान लौटाएगा।
शाशनथ

38

ध्यान दें कि यदि आप 2 तारीखों के बीच पूर्ण 24 दिन गिनना चाहते हैं , तो दिनांकित आपके लिए गलत मान लौटा सकता है।

प्रलेखन राज्यों के रूप में:

गणना में केवल मूल्यों के दिनांक भागों का उपयोग किया जाता है।

जिसके परिणामस्वरूप

select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

अपेक्षित 0 के बजाय 1 रिटर्न।

समाधान का उपयोग कर रहा है select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (दिनांकित की तुलना में तर्कों के विपरीत क्रम पर ध्यान दें)।

कुछ उदाहरण:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); रिटर्न ०
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); रिटर्न 1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now()); 2016-04-13 11:00:00 से अब तक कितने पूरे 24 दिन बीत चुके हैं

आशा है कि यह किसी की मदद करेगा, क्योंकि पहली बार में यह स्पष्ट नहीं है कि डेटफाइंड मूल्यों को क्यों अप्रत्याशित या गलत लगता है।


अजीब है कि तर्क के बीच datediff()और चारों ओर फ़्लिप हैं timestampdiff()
बिलीनाओह


6

मुझे TIMESTAMPDIFF पसंद है क्योंकि आप आसानी से यूनिट को बदल सकते हैं अगर जरूरत हो।


5

वर्तमान तिथि से गंतव्य तिथि के बीच के दिन प्राप्त करें

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

उत्पादन

दिन

 335

2
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM  membership_dates md

उत्पादन ::

id  entity_id    start_date            end_date             days

1   1236      2018-01-16 00:00:00     2018-08-31 00:00:00    227
2   2876      2015-06-26 00:00:00     2019-06-30 00:00:00   1465
3   3880      1990-06-05 00:00:00     2018-07-04 00:00:00   10256
4   3882      1993-07-05 00:00:00     2018-07-04 00:00:00   9130

आशा है कि यह भविष्य में किसी की मदद करता है

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