在 ODBC 中获取每月的最后一天2 个月前

问题描述

我试图在 ODBC 服务器上获取 2 个月前的最后一天,但似乎无法完全正确,因为 SSMS 在 ODBC 中不起作用。

我目前在 WHERE 子句中的代码部分返回上个月的第 1 天。我正在尝试获得前一天,即 2 个月前的最后一天。

这是我目前使用的代码

WHERE x_date = cast(dateadd(month,-1,dateadd(day,1 - day(getdate()),getdate())) as date)

目前,我们是 2021 年 5 月 7 日。该 WHERE 子句返回我 2021 年 4 月 1 日。我希望它返回我 2021 年 3 月 31 日。

我尝试了其他 WHERE 子句,但没有任何积极的结果。

任何帮助将不胜感激。

谢谢。

解决方法

您可以在 sql server 中使用 EOMONTH 函数:

SELECT EOMONTH(GETDATE(),-2)

如果它不受支持,那么这应该可以工作:

SELECT DATEADD(dd,-(DAY(DATEADD(mm,-1,getdate()))),DATEADD(mm,getdate()))

如果您指的是工作日,则按开放日:

select case  DATENAME(weekday,<above date>)
        when  'Saturday' then dateadd(day,2,<above date>)
        when  'sunday' then dateadd(day,1,<above date>)
        else  <above date>