この記事では、DATEDIFF()
の使用中に発生する可能性のある問題の解決策を提供します。 SQLServerで機能します。
次のエラーが発生した場合:
datediff関数がオーバーフローを引き起こしました。 2つの日付/時刻インスタンスを区切る日付部分の数が多すぎます。精度の低い日付部分でdatediffを使用してみてください。
戻り値が大きすぎるためです。 DATEDIFF()
関数はその結果をintとして返します データ・タイプ。このメッセージが表示された理由は、戻り値が intに対して大きすぎるためです。 データ・タイプ。幸い、これを修正する簡単な方法があります。
この問題を修正する最も速くて簡単な方法は、DATEDIFF_BIG()
に切り替えることです。 働き。この関数は、DATEDIFF()
とまったく同じように機能します 、その戻りデータ型が署名された bigintであることを除いて 。言い換えれば、それは本当に大きな数を処理することができます。
例
DATEDIFF()
かどうか見てみましょう 1000年で何ミリ秒か教えてくれます:
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
それが良いです。
それでも上記のエラーメッセージが表示される場合は、本当にを返そうとしている必要があります。 大きな数。その場合、次の少なくとも1つを行う必要があります。
- より短い期間を使用します。
- 精度の低いdatepartを使用する 。たとえば、ミリ秒数を返すのではなく、ほんの数秒で返します。
また、DATEDIFF_BIG()
を使用する前に、少なくともSQLServer2016を実行している必要があることに注意してください。 機能。