Po prostu wykonaj problematyczne DATEADD
w dwóch krokach, zaczynając od grubszej jednostki czasu (sekundy, minuty, godziny itp.), a następnie przechodząc z powrotem do drobnoziarnistej jednostki czasu dla reszty.
Unikaj jednak wchodzenia na poziom tygodni i miesięcy, ponieważ wymagałoby to rzeczywistych obliczeń kalendarza, a wolelibyśmy, aby system sobie z tym poradził.
Poniższy przykład wymaga obliczenia czasu rozpoczęcia przy (prawdopodobnie) dużym czasie trwania prądu w milisekundach.
-- 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()))