使用SQL获取上个月的最后一天

时间:2019-10-29 10:01:30

标签: sql-server

我正在尝试获取上个月最后一天没有时间显示的函数,即上个月的2019-09-30。

这是我尝试过的代码

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

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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

您应该使用EOMONTH()函数,其返回类型为date,而DATEADD()的返回类型是动态的,并取决于为date提供的参数。在您的情况下,来自DATEADD(s,-1, DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0))的结果是datetime数据类型,因为0implicitly converteddatetime的值01/01/1900 00:00:00({{ 1}}和int是不允许的。

date

答案 2 :(得分:1)

如果您采用今天的日期,并将其从今天的日期中减去,它将为您提供上个月的最后一天。

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

请注意将演员表转换为“ DATE”类型以仅提供日期

答案 3 :(得分:1)

您应该按照下面的示例所示尝试这种方式。

解决方案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