यह लेख MySQL TIMEDIFF()
. के बीच के अंतर को देखता है और TIMESTAMPDIFF()
कार्य।
दोनों कार्य समान कार्य करते हैं, लेकिन दोनों के बीच कुछ महत्वपूर्ण अंतर हैं।
निम्न तालिका इन दो कार्यों के बीच अंतर को सारांशित करती है:
TIMEDIFF() | TIMESTAMPDIFF() |
---|---|
2 तर्कों की आवश्यकता है। | 3 तर्कों की आवश्यकता है। |
पहली (दिनांक1 - दिनांक 2) से दूसरे तर्क को घटाता है। | तीसरे तर्क को तीसरे (दिनांक2 - दिनांक1) से घटाता है। |
परिणाम को समय मान के रूप में व्यक्त किया जाता है (और इसमें समय डेटा प्रकार की सीमाएं होती हैं)। | परिणाम एक पूर्णांक है, जिसे पहले तर्क द्वारा प्रदान की गई कई इकाइयों द्वारा व्यक्त किया जाता है। |
समय या डेटाटाइम एक्सप्रेशन स्वीकार करता है। | तारीख या डेटाटाइम एक्सप्रेशन स्वीकार करता है। |
दोनों तर्क एक ही प्रकार के होने चाहिए (समय या दिनांक समय)। | दोनों तर्क भिन्न प्रकार के हो सकते हैं (दिनांक या दिनांक समय)। |
उदाहरण 1 - बुनियादी अंतर
यहां एक उदाहरण दिया गया है जो इन कार्यों के बीच बुनियादी अंतर को दर्शाता है।
SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF', TIMESTAMPDIFF(hour, @date1, @date2) AS 'TIMESTAMPDIFF';
परिणाम:
+----------+---------------+ | TIMEDIFF | TIMESTAMPDIFF | +----------+---------------+ | 24:00:00 | -24 | +----------+---------------+
तो हम देख सकते हैं कि TIMEEDIFF()
एक समय मान लौटाया, और TIMESTAMPDIFF()
एक पूर्णांक लौटाया।
साथ ही, TIMEEDIFF()
पहली तारीख से दूसरी तारीख घटा दी, जबकि TIMESTAMPDIFF()
पहली तारीख को दूसरी तारीख से घटा दिया।
उदाहरण 2 - इकाई बदलना
जैसा कि बताया गया है, TIMESTAMPDIFF()
हमें यह निर्दिष्ट करने की अनुमति देता है कि किस इकाई में परिणाम का प्रतिनिधित्व करना है। यहां कुछ उदाहरण दिए गए हैं:
SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds';
परिणाम:
+----------+-------+---------+---------+ | TIMEDIFF | Hours | Minutes | Seconds | +----------+-------+---------+---------+ | 36:15:35 | -36 | -2175 | -130535 | +----------+-------+---------+---------+
हालांकि, अगर हम वास्तविक समय अंतर से बड़ी इकाई का उपयोग करते हैं तो यहां क्या होता है:
SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(week, @date1, @date2) AS 'Weeks', TIMESTAMPDIFF(month, @date1, @date2) AS 'Months';
परिणाम:
+----------+------+-------+--------+ | TIMEDIFF | Days | Weeks | Months | +----------+------+-------+--------+ | 36:15:35 | -1 | 0 | 0 | +----------+------+-------+--------+
इस मामले में, सप्ताह या महीने के मूल्यों को प्रभावित करने के लिए समय का अंतर इतना बड़ा नहीं था।
उदाहरण 3 - गलत तर्क प्रकार
जब आप प्रत्येक फ़ंक्शन में गलत तर्क प्रकार पास करते हैं तो क्या होता है इसका एक उदाहरण यहां दिया गया है।
SET @date1 = '2010-10-11', @date2 = '2010-10-10', @time1 = '12:15:35', @time2 = '00:00:00'; SELECT TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date', TIMESTAMPDIFF(hour, @time1, @time2) AS 'TIMESTAMPDIFF Time';
परिणाम:
+---------------+--------------------+ | TIMEDIFF Date | TIMESTAMPDIFF Time | +---------------+--------------------+ | 00:00:00 | NULL | +---------------+--------------------+
TIMEDIFF()
'तारीख' डेटा प्रकार का समर्थन नहीं करता है, और इसलिए यह 00:00:00
returns लौटाता है .
और TIMESTAMPDIFF()
फ़ंक्शन 'समय' डेटा प्रकार का समर्थन नहीं करता है, इसलिए यह NULL
लौटाता है ।
उदाहरण 4 - मिश्रित तर्क प्रकार
यदि आप प्रत्येक फ़ंक्शन को दो अलग-अलग डेटा प्रकार प्रदान करते हैं, तो यहां बताया गया है।
SET @thedate = '2010-10-11', @thetime = '12:15:35', @thedatetime = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF', TIMESTAMPDIFF(hour, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';
परिणाम:
+----------+---------------+ | TIMEDIFF | TIMESTAMPDIFF | +----------+---------------+ | NULL | -24 | +----------+---------------+
तो हम देख सकते हैं कि TIMESTAMPDIFF()
मिश्रित डेटा प्रकारों को ठीक से संभालता है (जब तक कि वे दिनांक या दिनांक और समय के हों)।
हालांकि, TIMEDIFF()
यह आवश्यक है कि दोनों तर्क एक ही प्रकार के हों, इसलिए हमें NULL
मिलता है , भले ही दोनों तर्क एक प्रकार के हैं जो फ़ंक्शन (समय और डेटाटाइम) का समर्थन करता है।
हम पुष्टि कर सकते हैं कि दोनों प्रकार वास्तव में निम्नलिखित उदाहरण के साथ इस फ़ंक्शन द्वारा समर्थित हैं:
SET @thetime1 = '12:15:35', @thetime2 = '10:15:35', @thedatetime1 = '2010-10-12 00:00:00', @thedatetime2 = '2010-10-10 00:00:00'; SELECT TIMEDIFF(@thetime1, @thetime2) AS 'time', TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';
परिणाम:
+----------+----------+ | time | datetime | +----------+----------+ | 02:00:00 | 48:00:00 | +----------+----------+
तो यह ठीक है, जब तक दोनों तर्क एक ही प्रकार के होते हैं (या तो समय या डेटाटाइम मान)।