繁体   English   中英

在 SQL 中获取上个月的最后一天

[英]Get last day of previous month in SQL

我正在尝试在没有时间显示的情况下获得上个月最后一天的 function,即上个月的 2019-09-30。

这是我尝试过的代码

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))

现在的预期结果 2019-09-30 实际结果

尝试使用带有偏移量的 EOMONTH function:

SELECT EOMONTH('2019-10-29', -1)

您应该使用EOMONTH() function,它的返回类型是date ,而DATEADD()的返回类型是动态的并且取决于为 date 提供的参数。 在您的情况下, DATEADD(s,-1, DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0))的结果是datetime时间数据类型,因为0隐式转换datetime时间值01/01/1900 00:00:00 (不允许在intdate之间进行隐式转换)。

SELECT EOMONTH(DATEADD(month, -1, GETDATE()))
-- or
SELECT EOMONTH(GETDATE(), -1)

如果你取今天的日期,并从今天的日期中减去它,它将得到上个月的最后一天。

SELECT DATEADD(DY, -DAY(getdate()), cast(getdate() as date))

请注意转换为“日期”类型以仅给出日期

您应该按照我在下面的示例中显示的方式尝试这种方式。

解决方案1:

上个月的最后一天

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
LastDay_PreviousMonth

解决方案2:

当月的最后一天

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth

解决方案3:

下个月的最后一天

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))
LastDay_NextMonth

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM