1
我有一個進程比較兩個日期時間值在一起,以確保活動發生在接收時間後。因爲我們允許60秒的餘地,所以我以前有一條delete語句和下面的where子句。直到我們在過去接收的時間很多,很多年SQL Server - 日期時間比較溢出INT值
i.ActivityDateTime < i.ReceivedDateTime
AND
DATEDIFF(ss, i.ActivityDateTime, i.ReceivedDateTime) > 60
這個過程運行得很好很長一段時間。由於DateDiff返回一個整數,所以比較溢出該值並且該過程失敗。
修復程序我在的地方,現在是
i.ActivityDateTime < i.ReceivedDateTime
AND
(
DATEDIFF(yy, i.ActivityDateTime, i.ReceivedDateTime) > 0
OR
DATEDIFF(ss, i.ActivityDateTime, i.ReceivedDateTime) > 60
)
測試已經在這個過程至今進展順利,但我擔心的是我失去了一些東西,並在將來,我可能會基於其他故障在活動和接收時間的其他組合上。
有沒有其他人經歷過類似的事情,以及我可以進行哪些其他可能的比較以便我可以確保將來不會發生任何問題?
現在可能不會幫你,但在SQL Server 2016之後,還有一個名爲DATEDIFF_BIG的新函數。 https://msdn.microsoft.com/en-gb/library/mt628058.aspx – mcr
這裏的第一個答案是否有幫助? http://stackoverflow.com/questions/1275208/sql-server-datediff-function-resulted-in-an-overflow – mcr
因爲您正在檢查超過1分鐘,爲什麼使用DATEDIFF(MINUTE,date1,date2)> 1 ? – Squirrel