Umgang mit arithmetischen Überlauffehlern mit DATEADD und Bigints
Die DATEADD-Funktion in SQL Server ist ein leistungsstarkes Tool zum Bearbeiten von Datums- und Uhrzeitangaben. Bei der Arbeit mit großen Ganzzahlen kann es jedoch zu arithmetischen Überlauffehlern kommen.
Problem:
Ein Benutzer hat versucht, mit der folgenden Abfrage ein JavaScript-Datum in ein SQL-Datum umzuwandeln :
DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
Es kam jedoch zu einem Ausnahme:
Arithmetic overflow error converting expression to data type int
Lösung:
Um den Überlauffehler zu vermeiden, wird empfohlen, den DATEADD-Vorgang in kleinere Schritte zu unterteilen und gröbere Zeiteinheiten wie Sekunden zu verwenden oder Minuten als Ausgangspunkt. Dadurch kann das System die Kalenderberechnungen effizienter durchführen.
Zum Beispiel berechnet die folgende Abfrage eine Startzeit aus einer Millisekundendauer:
-- Avoid using weeks or months due to calendar irregularities DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
Dieser Ansatz stellt sicher, dass arithmetische Operationen ausgeführt werden Wird innerhalb der Grenzen des Integer-Datentyps durchgeführt, um Überlauffehler zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie vermeide ich arithmetische Überlauffehler bei der Verwendung von DATEADD mit Bigints in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!