Arithmetischer Überlauf in DATEADD mit Bigints überwinden
Arithmetische Überlauffehler bei der Verwendung von DATEADD mit großen Bigint-Werten können frustrierend sein. Um dieses Problem zu beheben, besteht eine geeignete Problemumgehung darin, den DATEADD-Vorgang in mehreren Schritten auszuführen, beginnend mit einer gröberen Zeiteinheit wie Sekunden oder Minuten.
Wie in einem aufgetretenen Fehler hervorgehoben, wird direkt ein zu großer Bigint-Wert hinzugefügt Ein Datumsausdruck kann einen arithmetischen Überlauffehler auslösen. Um dies zu umgehen, können wir den Vorgang in kleinere Schritte aufteilen:
Für Beispiel, um eine Startzeit bei einer großen Stromdauer (Millisekunden) zu berechnen:
DECLARE @large_duration_ms BIGINT = 569337307200000; -- Step 1: Subtract minutes (60000ms) -- (a) Determine number of minutes DECLARE @minutes_to_subtract BIGINT = @large_duration_ms / 60000; -- (b) Subtract minutes DECLARE @start_time_minutes DATETIME = DATEADD(MINUTE, -@minutes_to_subtract, GETDATE()); -- Step 2: Add remaining milliseconds DECLARE @milli_seconds_to_add BIGINT = @large_duration_ms % 60000; DECLARE @start_time_final DATETIME = DATEADD(MILLISECOND, @milli_seconds_to_add, @start_time_minutes); SELECT @start_time_final;
Durch die Verwendung dieses mehrstufigen Ansatzes, Wir können potenzielle Überlauffehler vermeiden und Datumsangaben aus großen Bigint-Werten genau berechnen.
Das obige ist der detaillierte Inhalt vonWie vermeide ich arithmetische Überlauffehler bei der Verwendung von DATEADD mit großen Bigints?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!