Doe gewoon de problematische DATEADD
in twee stappen, beginnend met een grovere tijdseenheid (seconden, minuten, uren enz.), en voor de rest terugvallend op de fijnkorrelige.
Vermijd echter om naar het niveau van weken en maanden te gaan, want daarvoor zouden echte kalenderberekeningen nodig zijn en we zouden liever hebben dat het systeem dat afhandelt.
Het onderstaande voorbeeld moet een starttijd berekenen bij een (mogelijk) grote stroomduur in milliseconden.
-- 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()))