2016-01-21 111 views
0

我期待從日期時間獲取當前日期。我明白,要做到這一點,最好的辦法是通過SQL從去年的同一天開始

DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) 

但是如果我想從去年相當於一天,我是不是更好做

解決方案1 ​​

DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -365) 

或解決方案2

DATEADD(YEAR, -1, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)) 

有沒有時候解決方案1不工作?

+0

不是一個答案,因此評論,請確保你清楚用戶對閏日的期望。 –

+0

爲了擴大我以前的評論,你可能想要定義什麼「作品」對你意味着什麼。我不認爲兩者都會出錯,但哪個答案是正確的取決於要求。 –

+0

我想你可能已經擊中了頭部! – Henry

回答

3

解決方案2自動減去閏年366天。

解決方案1不;如果涉及閏年,您可能會獲得成功的一天。

0

獲得從datetime當前的日期,因爲SQL Server 2008中的最好方法,就是:

CAST(GETDATE() as DATE) 

一年減去最好的辦法是爲使用YEARMONTH

DATEADD(MONTH, -12, CAST(GETDATE() as DATE)) 
DATEADD(YEAR, -1, CAST(GETDATE() as DATE)) 

不是所有的日子都有365天,所以這將是一個不適當的計算。

+0

如果你將它與日期時間進行比較,會發生什麼?它會不會把它扔回去?這會有性能問題/收益嗎? – Henry

+0

@亨利。 。 。 'date'和'datetime'可以相互比較(日期轉換爲'datetime')。真的沒有任何性能影響。實際上,'cast(......作爲日期)'甚至是sargable - 也許是唯一的「功能」。 –