sql >> データベース >  >> RDS >> Sqlserver

SQLServerで「datediff関数がオーバーフローを引き起こしました」エラーを修正する方法

    この記事では、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を実行している必要があることに注意してください。 機能。


    1. SQLクエリの同等性の証明

    2. SQLServerでのデータベースメールの構成

    3. Oracleでバージョン4(ランダム)UUIDを生成するにはどうすればよいですか?

    4. 日時からのトリミング時間–フォローアップ