यह आलेख दो MySQL फ़ंक्शंस के बीच अंतर को देखता है; DATEDIFF()
और TIMESTAMPDIFF()
।
दोनों फ़ंक्शन दो तिथियों और/या समय के बीच का अंतर लौटाते हैं, लेकिन परिणाम दो कार्यों के बीच भिन्न होता है।
निम्न तालिका इन दो कार्यों के बीच अंतर को सारांशित करती है:
DATEDIFF() | TIMESTAMPDIFF() |
---|---|
2 तर्कों की आवश्यकता है। | 3 तर्कों की आवश्यकता है। |
पहले से दूसरे तर्क को घटाता है (expr1 - expr2)। | तीसरे तर्क से दूसरे तर्क को घटाता है (expr2 - expr1)। |
परिणाम को दिनों में मान के रूप में व्यक्त किया जाता है। | परिणाम पहले तर्क द्वारा प्रदान की गई इकाई के रूप में व्यक्त किया जाता है। |
अपने तर्कों के केवल दिनांक मान की तुलना कर सकते हैं। | अपने तर्कों के दिनांक और समय मान की तुलना कर सकते हैं। |
उदाहरण 1 - बुनियादी ऑपरेशन
यहां एक उदाहरण दिया गया है जो दर्शाता है कि ये कार्य कैसे काम करते हैं, और एक ही इकाई का उपयोग करने पर भी परिणाम कैसे भिन्न होते हैं।
सेट @ date1 ='2010-10-11 00:00:00', @date2 ='2010-10-10 00:00:00'; 'DatedIFF' के रूप में DATEDIFF(@date1, @date2) चुनें, TIMESTAMPDIFF (दिन, @ date1, @ date2) 'TIMESTAMPDIFF' के रूप में;
परिणाम:
+----------+---------------+| दिनांकित | टाइमस्टैम्पडिफ |+----------+---------------+| 1 | -1 |+----------+---------------+
तो दोनों कार्य दिनों में अंतर लौटाते हैं, हालांकि एक परिणाम सकारात्मक है और दूसरा नकारात्मक है। ऐसा इसलिए है क्योंकि DATEDIFF()
पहली तारीख से दूसरी तारीख घटाता है, जबकि TIMESTAMPDIFF()
पहली तारीख को दूसरी से घटाता है।
उदाहरण 2 - इकाई बदलना
जैसा कि पिछला उदाहरण दर्शाता है, TIMESTAMPDIFF()
आपको परिणामों को वापस करने के लिए एक इकाई निर्दिष्ट करने की अनुमति देता है (वास्तव में, इसकी आवश्यकता . है आप इकाई निर्दिष्ट करने के लिए)। दूसरी ओर, DATEDIFF()
आपको एक इकाई निर्दिष्ट करने की अनुमति नहीं देता है। यह केवल दिनों में परिणाम देता है।
इसलिए हम पिछले उदाहरण को संशोधित कर सकते हैं ताकि TIMESTAMPDIFF()
दिनों के बजाय घंटों की संख्या लौटाता है:
सेट @ date1 ='2010-10-11 00:00:00', @date2 ='2010-10-10 00:00:00'; 'DatedIFF' के रूप में DATEDIFF(@date1, @date2) चुनें, TIMESTAMPDIFF (घंटा, @ date1, @ date2) 'TIMESTAMPDIFF' के रूप में;
परिणाम:
+----------+---------------+| दिनांकित | टाइमस्टैम्पडिफ |+----------+---------------+| 1 | -24 |+----------+---------------+
आप माइक्रोसेकंड तक जा सकते हैं:
सेट @ date1 ='2010-10-11 00:00:00', @date2 ='2010-10-10 00:00:00'; 'DatedIFF' के रूप में DATEDIFF(@date1, @date2) चुनें, TIMESTAMPDIFF (माइक्रोसेकंड, @ date1, @ date2) 'TIMESTAMPDIFF' के रूप में;
परिणाम:
+----------+---------------+| दिनांकित | टाइमस्टैम्पडिफ |+----------+---------------+| 1 | -86400000000 |+----------+---------------+
उदाहरण 3 - शुद्धता
DATEDIFF()
. की सटीकता एक दिन है, और TIMESTAMPDIFF()
माइक्रोसेकंड तक जा सकते हैं। हालांकि TIMESTAMPDIFF()
. की सटीकता (और वह जिस इकाई की तुलना करता है) अभी भी निर्दिष्ट इकाई पर निर्भर करता है।
परिणाम:
+----------+----------+----------+---------+----------+ --------------+| दिनांकित | दिन | घंटे | मिनट | सेकंड | माइक्रोसेकंड |+----------+------+----------+------------+---- -------------+| 0 | 0 | 23 | 1439 | 86399 | 8639900000 |+----------+----------+----------+------------+-----+- -------------+
और अगर हम दूसरी तारीख को एक सेकंड बढ़ा देते हैं (जो इसे अगले दिन लाता है):
सेट @ date1 ='2010-10-10 00:00:00', @date2 ='2010-10-11 00:00:00'; 'DatedIFF' के रूप में DATEDIFF(@date1, @date2) चुनें, TIMESTAMPDIFF (दिन, @ date1, @ date2) 'दिन' के रूप में, TIMESTAMPDIFF (घंटा, @ date1, @ date2) 'घंटे' के रूप में, TIMESTAMPDIFF (मिनट, @ date1, @ date2) AS 'मिनट', TIMESTAMPDIFF (दूसरा, @ date1, @ date2) AS 'सेकेंड', TIMESTAMPDIFF (माइक्रोसेकंड, @ date1, @ date2) 'माइक्रोसेकंड' के रूप में;
परिणाम:
+----------+----------+----------+---------+----------+ --------------+| दिनांकित | दिन | घंटे | मिनट | सेकंड | माइक्रोसेकंड |+----------+------+----------+------------+---- -------------+| -1 | 1 | 24 | 1440 | 86400 | 8640000000 |+----------+----------+----------+-----------+--- -------------+
यहां एक और उदाहरण दिया गया है, इस बार जब हम महीनों, तिमाहियों और वर्षों को वापस करते हैं तो यह कैसा दिखता है, जब अंतर एक महीने (या 31 दिन) का होता है:
सेट @ date1 ='2010-10-10 00:00:00', @date2 ='2010-11-10 00:00:00'; 'DatedIFF' के रूप में DATEDIFF(@date1, @date2) चुनें, TIMESTAMPDIFF (दिन, @ date1, @ date2) 'दिन' के रूप में, TIMESTAMPDIFF (माह, @ date1, @ date2) 'माह' के रूप में, TIMESTAMPDIFF (तिमाही, @ date1, @ date2) 'तिमाही' के रूप में, TIMESTAMPDIFF (वर्ष, @ date1, @date2) 'वर्ष' के रूप में;
परिणाम:
+----------+----------+----------+--------+------+| दिनांकित | दिन | महीना | क्वार्टर | वर्ष |+----------+------+----------+--------+------+| -31 | 31 | 1 | 0 | 0 |+----------+------+----------+------------+------+
उदाहरण 4 - गलत तर्क प्रकार
गलत तर्क प्रकार पारित होने पर दोनों फ़ंक्शन शून्य हो जाते हैं।
सेट करें 'TIMESTAMPDIFF' के रूप में;परिणाम:
+----------+---------------+| दिनांकित | टाइमस्टैम्पडिफ |+----------+---------------+| नल | नल |+----------+---------------+
उदाहरण 5 - मिश्रित तर्क प्रकार
दोनों फ़ंक्शन आपको एक तर्क के रूप में एक तारीख और दूसरे तर्क के रूप में एक डेटाटाइम प्रदान करने की अनुमति देते हैं।
सेट @thedate ='2010-10-11', @thedatetime ='2010-10-10 00:00:00'; 'DatedIFF' के रूप में DATEDIFF(@thedate, @thedatetime) चुनें, TIMESTAMPDIFF(दिन, @ दिनांक, @thedatetime) 'TIMESTAMPDIFF' के रूप में;
परिणाम:
+----------+---------------+| दिनांकित | टाइमस्टैम्पडिफ |+----------+---------------+| 1 | -1 |+----------+---------------+