خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


رفع ارور datediff function resulted in an overflow

رفع ارور datediff function resulted in an overflow
یکی خطاهایی که در SQL Server هنگام استفاده از تابع DATEDIFF ممکن است با آن مواجه شوید، خطای زیر می باشد و در این پست در خصوص راه حل این ارور صحبت خواهیم کرد:

سیستم یکپارچۀ سازمانی راهکار



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.

خروجی تابع DATEDIFF از نوع Int می باشد و از آنجایی که مقدار برگشتی خیلی بزرگ است که در محدود int که نوع خروجی تابع DATEDIFF است، نمی گنجد، این خطا نمایش داده شده است. Syntax استفاده از تابع DATEDIFF مشابه DATEDIFF_BIG می باشد و در این شرایط می توانید از تابع DATEDIFF_BIG استفاده کنید.
هر دو تابع طرز کاری مشابه دارند با این تفاوت که خروجی DATEDIFF_BIG از نوع Bigint بوده و بسیار بزرگتر از DATEDIFF می باشد.
به عنوان مثال می خواهیم ببینیم که 1000 سال، چند میلی ثانیه است و قطعا تابع DATEDIFF نمی تواند جواب را به ما در خروجی نمایش دهد:

SELECT DATEDIFF(
millisecond,
SYSDATETIME(),
DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';

رفع ارور datediff function resulted in an overflow
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.

همانطور که مشاهده کردید، خروجی آنقدر بزرگ است که در تابع datediff قرار نمی گیرد. ولی با استفاده از تابع DATEDIFF_BIG خیلی راحت محاسبه انجام شده و در خروجی آن را مشاهده خواهید کرد.

SELECT DATEDIFF_BIG(
millisecond,
SYSDATETIME(),
DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';

Milliseconds in 1000 years
--------------------------
31556908800000

رفع ارور datediff function resulted in an overflow
توجه داشته باشید که برای استفاده از تابع DATEDIFF_BIG، حداقل باید SQL Server 2016 را نصب کرده باشید و در ورژن های قبل تر نمی توانید از این تابع استفاده کنید.
اگر خروجی باز هم با خطا مواجه شد، نشان می دهد که از محدوده Bigint هم بزرگتر است و از این رو باید بازه زمانی را کوتاه تر و یا مثلا خروجی از نوع دیگری انتخاب کنید. مثلا در اینجا خروجی ما بر حسب میلی ثانیه بوده که به جای میلی ثانیه، از ثانیه استفاده کنیم تا خروجی کوچکتر و قابل نمایش شود.


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز