问题描述
我试图在 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>