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

SQL:Verwendung von DATEADD mit bigints

Führen Sie einfach das problematische DATEADD durch in zwei Schritten, beginnend mit einer gröberen Zeiteinheit (Sekunden, Minuten, Stunden usw.), um dann für den Rest auf die feinkörnigere zurückzugehen.

Vermeiden Sie es jedoch, auf die Ebene von Wochen und Monaten zu gehen, da dies tatsächliche Kalenderberechnungen erfordern würde und wir es vorziehen würden, wenn das System damit umgeht.

Das folgende Beispiel muss eine Startzeit bei einer (möglicherweise) großen Stromdauer in Millisekunden berechnen.

-- large durations can overflow the integer argument needed for DATEADD

-- so do as two steps subtracting minutes (60000ms) and then remaining milliseconds.

DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))