यह आलेख DATEDIFF()
. का उपयोग करते समय कभी-कभी आपके सामने आने वाली समस्या का समाधान प्रदान करता है SQL सर्वर में कार्य करता है।
यदि आप निम्न त्रुटि का सामना करते हैं:
<ब्लॉकक्वॉट>dateiff फ़ंक्शन के परिणामस्वरूप अतिप्रवाह हुआ। दो दिनांक/समय इंस्टेंस को अलग करने वाले डेटपार्ट्स की संख्या बहुत बड़ी है। कम सटीक डेटपार्ट के साथ dateiff का उपयोग करने का प्रयास करें।
ऐसा इसलिए है क्योंकि वापसी मूल्य बहुत बड़ा है। DATEDIFF()
फ़ंक्शन अपना परिणाम int . के रूप में देता है डेटा प्रकार। आपको यह संदेश मिलने का कारण यह है कि int . के लिए वापसी मान बहुत बड़ा है डेटा प्रकार। सौभाग्य से इसे ठीक करने का एक आसान तरीका है।
इस समस्या को ठीक करने का सबसे तेज़ और आसान तरीका है DATEDIFF_BIG()
पर स्विच करना समारोह। यह फ़ंक्शन बिल्कुल DATEDIFF()
like की तरह काम करता है , सिवाय इसके कि इसका रिटर्न डेटा प्रकार एक हस्ताक्षरित बिगिंट . है . दूसरे शब्दों में, यह वास्तव में बड़ी संख्या को संभाल सकता है।
उदाहरण
आइए देखें कि क्या DATEDIFF()
हमें बता सकते हैं कि एक हज़ार साल में कितने मिलीसेकंड होते हैं:
SELECT DATEDIFF( millisecond, SYSDATETIME(), DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';
परिणाम:
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.
शायद नहीं। ऐसा लगता है कि int . में फ़िट होने के लिए बहुत अधिक मिलीसेकंड हैं ।
बड़ी तोपों का समय। DATEDIFF_BIG()
, अपना काम करो…
SELECT DATEDIFF_BIG( millisecond, SYSDATETIME(), DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';
परिणाम:
Milliseconds in 1000 years -------------------------- 31556908800000
यह बेहतर है।
यदि आपको अभी भी उपरोक्त त्रुटि संदेश मिलता है, तो आप एक वास्तव में . वापस करने का प्रयास कर रहे होंगे बड़ी संख्या। उस स्थिति में आपको निम्न में से कम से कम एक करना होगा:
- छोटी अवधि का उपयोग करें।
- कम सटीक डेटपार्ट का उपयोग करें . उदाहरण के लिए, मिलीसेकंड की संख्या वापस करने की कोशिश करने के बजाय, इसे कुछ सेकंड के साथ आज़माएं।
यह भी ध्यान रखें कि DATEDIFF_BIG()
का उपयोग करने से पहले आपको कम से कम SQL Server 2016 चलाना होगा समारोह।