获得上一年的第一个日期

HDB*_*HDB 4 sql t-sql sql-server

如何修改以下声明以获取上一年的第一个日期(最好不引入其他报价)

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), -1)
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 9

如果您SQL Server 2012+使用DATEFROMPARTS:

SELECT DATEFROMPARTS ( DATEPART(yyyy, GETDATE()) - 1, 1, 1 )
Run Code Online (Sandbox Code Playgroud)

SQL Server 2012+


ton*_*one 8

更好的答案是:

SELECT DATEADD(yy,DATEDIFF(yy,0,GETDATE())-1,0)
Run Code Online (Sandbox Code Playgroud)

如果您了解原始版本的工作原理,您就知道将 -1 放在哪里。

DATEADD 的参数为 DATEADD(interval, Increment int, expression Smalldatetime)。

因此,在上面的表达式中,DATEDIFF 函数返回一个整数,即当前日期和日期零 (0) 之间的年差。

上述语句中的表达式接受零 (0) 作为小日期时间。

因此,它将“日期零”和“当前日期”之间的年数添加到日期零。

日期零是 1900 年 1 月 1 日,因此无论提供的日期是什么,都会为您提供 1 月 1 日。

以下为您提供零日期:

select dateadd(yy,0,0)
Run Code Online (Sandbox Code Playgroud)

因此,要再返回一年,只需从间隔中减去 1,间隔就变为:

DATEDIFF(yy,0,GETDATE())-1
Run Code Online (Sandbox Code Playgroud)


HDB*_*HDB 6

让它工作

DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))
Run Code Online (Sandbox Code Playgroud)