如何修改以下声明以获取上一年的第一个日期(最好不引入其他引号)
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), -1)
答案 0 :(得分:8)
如果您使用SQL Server 2012+
,请使用 DATEFROMPARTS
:
SELECT DATEFROMPARTS ( DATEPART(yyyy, GETDATE()) - 1, 1, 1 )
的 LiveDemo
强>
答案 1 :(得分:4)
让它发挥作用
Test::Group
答案 2 :(得分:2)
更好的答案是:
SELECT DATEADD(yy,DATEDIFF(yy,0,GETDATE())-1,0)
如果您了解原始作品的工作原理,则知道将-1放在哪里。
DATEADD的参数为DATEADD(间隔,增量int,表达式smalldatetime)。
因此,在上面的表达式中,DATEDIFF函数返回一个整数,即当前日期和日期零(0)之间的年差。
上述语句中的表达式接受零(0)作为smalldatetime。
因此它将“日期零”和“当前日期”之间的年数加到日期零。
日期零是1900年1月1日,因此无论提供的日期是什么,您都将获得1月1日。
以下内容为您提供零日期:
select dateadd(yy,0,0)
因此,要再追溯一年,只需从间隔中减去1,则间隔变为:
DATEDIFF(yy,0,GETDATE())-1
答案 3 :(得分:1)
另一种方法是:
select dateadd(year, -1, datename(year, getdate()) + '0101')