我正在研究SQL Server 2005上的清除过程,该过程必须删除早于1年前的表中的所有行+当前年份的时间。
例如:如果我今天执行 6-10-2009 的程序,则必须删除早于 2008-01-01 00:00 的行(包括2007年)和倒退)。
如何获得一年中第一秒的日期?
我试过这个:
select cast((DATEPART(year, getdate()) -1 )AS DATETIME);
但是我得到1905-07-02 00:00:00.000
而不是2008-01-01 00:00
(因为我错误预期)。
有人可以帮助我吗?
答案 0 :(得分:11)
编辑:这是当年的回归,当时的问题是前一年。代码已经更正以反映这一点。
使用此
select DATEADD(yy, DATEADD(yy, DATEDIFF(yy,0,getdate()), 0), -1)
或者使用你的变量:
select DATEADD(yy, DATEADD(yy, DATEDIFF(yy,0,@YourDateTimeValue), 0), -1)
答案 1 :(得分:5)
这将有效:
select cast('01 jan' + CAST((DATEPART(year, getdate())-1) as varchar) AS DATETIME);
(我知道这不是“最好的”解决方案,可能涉及更多的演员而不是必要,但它有效,而且如何使用它似乎是一个务实的解决方案!)
答案 2 :(得分:0)
SELECT DATEADD(year, DATEDIFF(year, 365, GETDATE()), 0)