2013-04-23 19 views
0

我所試圖做的是看是否有日期時間變量的日期隨時在過去十二個月的值發生日期時間變量。如何檢查是否在過去十二個月

我嘗試使用DATEDIFF功能,但後來我很快就發現,這已經四捨五入問題(第31 DEC/1之間的比較JAN只能算作1個月例如,儘管只有一天了他們之間的傳遞)

爲了使這個更準確,我可以使用-365天作爲參數,而不是-12個月但是這仍然給出了不考慮閏年的問題(不是一個常見的場景,但仍然一個我最好避免!)

任何想法,我如何能夠最好地去呢?

+0

?包括小時和分鐘嗎? – 2013-04-23 08:45:15

回答

1

閏年的問題可以通過DATEADD(datepart,number,date)函數來解決。您可以指定從當前日期開始減去一年。

where myDate between DATEADD (year , -1 , GETDATE()) and GETDATE() 
您正在使用什麼日期格式
1

使用DATEADD而不是從今天減去一年和比較

@datetimevariable >= DATEADD(year, -1, GETDATE()) 

注意:您不需要比較上限(GETDATE()),除非你有在將來的日期。

另外,你想要的是一年下來到小時和分鐘?如果沒有,用這個它是安全的datatype precedence如果@datetimevariabledatetimedatetime2,你需要這是一個WHERE子句或這樣

@datetimevariable >= CAST(DATEADD(year, -1, GETDATE()) as date)

這適用於閏年

SELECT DATEADD(YEAR, -1, '20120301'), DATEADD(YEAR, -1, '20120229') 

2011-03-01 00:00:00.000 
2011-02-28 00:00:00.000 

DATEDIFF作品在特定的邊界:本月開始,今年開始,午夜等,這就是爲什麼在這種情況下失敗

0

DATEDIFF計算分區數在兩個日期之間,抱歉地說沒有舍入問題,它確實如它在罐子上所說的那樣。您最好的解決方案可能是使用DATEADD

WHERE MyVal BETWEEN GETDATE() AND DATEADD(YEAR, -1, GETDATE()) 
相關問題