日期部分月份显示上个月的最后一天 SQL Server



今天早上我一直有点挠头,因为解决这个问题可能非常简单,但是当我运行以下标准时,我最终会在结果中显示一月的最后一天。

DATEADD(SECOND, chg.LAST_MODIFIED_DATE, '19700101') >= 
    DATEADD(DD, - (DATEPART(m, GETDATE())), CAST(CURRENT_TIMESTAMP as DATE))

我只想要二月份的结果。有人可以指出我明显的错误吗?

谢谢

您正在从当前日期中减去月份数字。这不会返回上个月的最后一天,而是返回过去最多 12 天的日期。今天,2月2日,这个回归1月31日,这只是一个意外。

如果要查找月初,请减去月日 -1。毕竟你不想要 2018/2/0 :

SELECT DATEADD(day, 1-(DATEPART(day, GETDATE())), CAST(CURRENT_TIMESTAMP as DATE))

更好的是,使用DATEFROMPARTS:

SELECT DATEFROMPARTS( YEAR(GETDATEA()), MONTH(GETDATE()), 1)

使用 DATEFROMPARTS 更易于阅读和维护,同时对 GETDATE(( 和 CURRENT_TIMESTAMP 进行相同数量的调用

为了获得上个月的最后一天,请使用下面的代码

SELECT DATEADD(DAY, -(DAY(GETDATE())), GETDATE())
<</div> div class="one_answers">

要获取任何月份的最后一天,Pinal博客中的有用脚本

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
LastDay_PreviousMonth
----Last Day of Current Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth
----Last Day of Next Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))

这应该提供当月的第一天:

SELECT DATEADD(d, -1 * CASE WHEN DAY(GETDATE()) = 1 THEN 0 ELSE DAY(GETDATE())-1 END, CONVERT(DATE, GETDATE()))

最新更新