Datepart月显示上个月SQL Server的最后一天

时间:2018-02-02 09:45:08

标签: sql sql-server

今天早上我一直在挠头,因为对此的解决可能非常简单但是当我按照以下标准运行时,我最终会在结果中显示1月的最后一天。

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

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

由于

4 个答案:

答案 0 :(得分:2)

您正在从当前日期减去月份数。这不会返回上个月的最后一天,它会返回过去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进行相同数量的调用

答案 1 :(得分:0)

为了获得正常月份的最后一天,请使用以下代码

SELECT DATEADD(DAY, -(DAY(GETDATE())), GETDATE())

答案 2 :(得分:0)

要获得任何月份的最后一天,来自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))

答案 3 :(得分:0)

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

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