2016-01-21 89 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 - 也许是唯一的“功能”。 –