बस समस्याग्रस्त DATEADD
करें दो चरणों में, एक मोटे समय इकाई (सेकंड, मिनट, घंटे आदि) से शुरू करते हुए, फिर शेष के लिए बारीक दाने वाली इकाई पर वापस जाना।
हफ्तों और महीनों के स्तर पर जाने से बचें, हालांकि इसके लिए वास्तविक कैलेंडर गणनाओं की आवश्यकता होगी और हम इसे संभालने के लिए सिस्टम को प्राथमिकता देंगे।
नीचे दिए गए उदाहरण के लिए मिलीसेकंड में (संभवतः) बड़ी वर्तमान अवधि को देखते हुए प्रारंभ समय की गणना करने की आवश्यकता है।
-- 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()))