Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So beheben Sie den Fehler „datediff-Funktion führte zu einem Überlauf“ in SQL Server

Dieser Artikel bietet eine Lösung für ein Problem, das gelegentlich bei der Verwendung von DATEDIFF() auftreten kann Funktion in SQL Server.

Wenn Sie auf den folgenden Fehler stoßen:

Die Funktion datediff führte zu einem Überlauf. Die Anzahl der Datumsteile, die zwei Datums-/Uhrzeitinstanzen trennen, ist zu groß. Versuchen Sie, datediff mit einem weniger genauen Datumsteil zu verwenden.

Das liegt daran, dass der Rückgabewert zu groß ist. Das DATEDIFF() Die Funktion gibt ihr Ergebnis als int zurück Datentyp. Der Grund für diese Meldung ist, dass der Rückgabewert zu groß für int ist Datentyp. Glücklicherweise gibt es eine einfache Möglichkeit, dies zu beheben.

Der schnellste und einfachste Weg, dieses Problem zu beheben, besteht darin, zu DATEDIFF_BIG() zu wechseln Funktion. Diese Funktion funktioniert genauso wie DATEDIFF() , außer dass der Rückgabedatentyp ein signiertes bigint ist . Mit anderen Worten, es kann wirklich große Zahlen verarbeiten.

Beispiel

Mal sehen, ob DATEDIFF() kann uns sagen, wie viele Millisekunden in tausend Jahren sind:

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

Ergebnis:

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. 

Vielleicht nicht. Anscheinend gibt es zu viele Millisekunden, um in ein int zu passen .

Zeit für die großen Geschütze. DATEDIFF_BIG() , mach dein Zeug…

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

Ergebnis:

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

Das ist besser.

Wenn Sie immer noch die obige Fehlermeldung erhalten, müssen Sie versuchen, wirklich zurückzugeben große Nummer. In diesem Fall müssen Sie mindestens einen der folgenden Schritte ausführen:

  • Verwenden Sie einen kürzeren Zeitraum.
  • Verwenden Sie einen weniger genauen Datumsteil . Anstatt beispielsweise zu versuchen, die Anzahl der Millisekunden zurückzugeben, versuchen Sie es mit nur Sekunden.

Beachten Sie auch, dass Sie mindestens SQL Server 2016 ausführen müssen, bevor Sie DATEDIFF_BIG() verwenden können Funktion.