SQL सर्वर में, आप T-SQL का उपयोग कर सकते हैं DATEDIFF()
दो तिथियों/समय के बीच अंतर वापस करने के लिए कार्य। यह किसी भी अभिव्यक्ति पर काम करता है जिसे एक समय . के लिए हल किया जा सकता है , तारीख , स्मॉलडेटटाइम , डेटाटाइम , डेटाटाइम2 , या डेटाटाइमऑफ़सेट मूल्य।
यह लेख DATEDIFF()
. के उदाहरण प्रदान करता है SQL सर्वर में कार्य करता है।
सिंटैक्स
सबसे पहले, यहाँ सिंटैक्स है:
DATEDIFF ( datepart , startdate , enddate )
जहां डेटपार्ट दिनांक का वह भाग है जिसकी आप तुलना करना चाहते हैं। शुरू होने की तारीख पहली तारीख है और समाप्ति अंतिम तिथि है।
जिस तरह से यह काम करता है वह यह है कि यह निर्दिष्ट datepart की गिनती (हस्ताक्षरित पूर्णांक मान के रूप में) देता है निर्दिष्ट आरंभ तिथि . के बीच की सीमाएं पार और समाप्ति तिथि ।
उदाहरण 1
यहां एक बुनियादी उदाहरण दिया गया है जहां हम दो तिथियों के बीच दिनों की संख्या का पता लगाते हैं:
SELECT DATEDIFF(day, '2001-01-01', '2002-01-01') AS Result;
परिणाम:
+----------+ | Result | |----------| | 365 | +----------+
उदाहरण 2
यहां एक और उदाहरण है जहां मैं दो चर घोषित करता हूं और उन्हें दो अलग-अलग तिथियां निर्दिष्ट करता हूं (मैं DATEADD()
का उपयोग करता हूं पहली तारीख में 1 साल जोड़ने के लिए)। मैं तब DATEDIFF()
. का उपयोग करता हूं उस तिथि के लिए विभिन्न दिनांक भागों को वापस करने के लिए:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 1, @date1); SELECT DATEDIFF( year, @date1, @date2 ) AS Years, DATEDIFF( quarter, @date1, @date2 ) AS Quarters, DATEDIFF( month, @date1, @date2 ) AS Months, DATEDIFF( week, @date1, @date2 ) AS Weeks, DATEDIFF( dayofyear, @date1, @date2 ) AS DayOfYear, DATEDIFF( day, @date1, @date2 ) AS Days;
परिणाम:
+---------+------------+----------+---------+-------------+--------+ | Years | Quarters | Months | Weeks | DayOfYear | Days | |---------+------------+----------+---------+-------------+--------| | 1 | 4 | 12 | 53 | 366 | 366 | +---------+------------+----------+---------+-------------+--------+
उदाहरण 3
जैसा कि उल्लेख किया गया है, आप तिथियों के बीच के समय के हिस्सों को भी वापस कर सकते हैं। यहां दिनांक/समय मानों के बीच घंटों, मिनटों और सेकंडों की संख्या लौटाने का एक उदाहरण दिया गया है:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(hour, 1, @date1); SELECT DATEDIFF( hour, @date1, @date2 ) AS Hours, DATEDIFF( minute, @date1, @date2 ) AS Minutes, DATEDIFF( second, @date1, @date2 ) AS Seconds;
परिणाम:
+---------+-----------+-----------+ | Hours | Minutes | Seconds | |---------+-----------+-----------| | 1 | 60 | 3600 | +---------+-----------+-----------+
उदाहरण 4
और यहां दो दिनांक/समय मानों के बीच मिलीसेकंड, माइक्रोसेकंड और नैनोसेकंड की संख्या प्राप्त करने का एक उदाहरण दिया गया है:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(millisecond, 1, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
परिणाम:
+----------------+----------------+---------------+ | Milliseconds | Microseconds | Nanoseconds | |----------------+----------------+---------------| | 1 | 1000 | 1000000 | +----------------+----------------+---------------+
उदाहरण 5 - त्रुटि!
यदि आप कुछ चरम करने की कोशिश करते हैं, जैसे, 100 वर्षों में नैनोसेकंड की संख्या लौटाते हैं, तो आपको एक त्रुटि मिलेगी। ऐसा इसलिए है क्योंकि DATEDIFF()
एक int . लौटाता है मान है, और 100 वर्षों में int . की तुलना में अधिक नैनोसेकंड हैं डेटा प्रकार संभाल सकता है।
तो अगर आप ऐसा करने की कोशिश करते हैं तो यहां क्या होता है:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 100, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
परिणाम:
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
सौभाग्य से, यदि आपको वास्तव में पता लगाना है कि 100 वर्षों में कितने नैनोसेकंड हैं, तो आप DATEDIFF_BIG()
का उपयोग कर सकते हैं इसके बजाय कार्य करें। यह फ़ंक्शन एक हस्ताक्षरित बिगिंट . लौटाता है डेटा प्रकार, जो आपको DATEDIFF()
. से कहीं अधिक बड़े मान वापस करने की अनुमति देता है कर सकते हैं।
उदाहरण 6 - अजीब परिणाम प्राप्त करना?
DATEDIFF()
. से आपको मिलने वाले परिणाम कभी-कभी पूरी तरह से गलत लग सकता है यदि आप नहीं जानते कि फ़ंक्शन वास्तव में कैसे काम करता है।
उदाहरण के लिए:
DECLARE @startdate datetime2 = '2016-01-01 00:00:00.0000000', @enddate datetime2 = '2016-12-31 23:59:59.9999999'; SELECT DATEDIFF(day, @startdate, @enddate) Days, DATEDIFF(year, @startdate, @enddate) Years;
परिणाम:
+--------+---------+ | Days | Years | |--------+---------| | 365 | 0 | +--------+---------+
अगर आप नहीं जानते कि कैसे DATEDIFF()
वास्तव में काम करता है, यह परिणाम इतना गलत लग सकता है, कि आपको यह मानने के लिए क्षमा किया जाएगा कि यह एक बग है। लेकिन यह कोई बग नहीं है।
DatedIFF देखें () SQL सर्वर में गलत परिणाम देता है? इसे पढ़ें। इस उदाहरण और अन्य मामलों को देखने के लिए जहां परिणाम पूरी तरह से गलत दिख सकते हैं, लेकिन पूरी तरह से सही हो सकते हैं (और इस पर स्पष्टीकरण के लिए कि वे जिस तरह से दिखते हैं वह क्यों दिखते हैं)।
उस पृष्ठ के उदाहरणों में से एक शायद यहाँ फिर से ध्यान देने योग्य है। DATEDIFF()
वास्तव में आपके SET DATEFIRST
. पर ध्यान नहीं देता है मूल्य। इसका परिणाम अप्रत्याशित परिणाम हो सकता है, खासकर यदि आप ऐसी संस्कृति में हैं जो रविवार को सप्ताह के पहले दिन के रूप में उपयोग नहीं करता है। यदि आपको लगता है कि यह आपको प्रभावित कर सकता है, तो SQL सर्वर में DATEDIFF() SET DATEFIRST को अनदेखा करने के लिए इस समाधान को देखें।