我有一个查询,它给了我上个月的完整数据
select * from Tabl
where datepart(month, completed_date) = DATEPART(month, getDate())-1
and datepart(year, completed_date) = datepart(year, getDate())
但是当当前日期是在1月时,它给了我错误的数据
如果当前月份是1月,如何编写条件以返回正确的数据?
答案 0 :(得分:2)
SQL Server的DATEADD函数将在这里为您提供帮助。
select * from Tabl
where datepart(month, completed_date) = DATEPART(month, DATEADD(MM,-1,getDate()))
and datepart(year, completed_date) = datepart(year, DATEADD(MM,-1,getDate()))
使用的'MM'只是Month的关键字。
答案 1 :(得分:1)
好吧,请尝试从日期减去一个月:
select *
from Tabl
where month(completed_date) = month(dateadd(month, -1, getdate()) and
year(completed_date) = year(dateadd(month, -1, getdate());
但是,如果你有completed_date
的索引,最好把所有操作放在getdate()
上,这样表达式就是“sargable”(也就是说,可以使用索引):< / p>
where completed_date >= cast(dateadd(month, -1, getdate() - day(getdate() + 1) as date) and
completed_date < cast(getdate() - day(getdate())
当您从该日期中减去“当月日期”时,您将获得上个月的最后一天。
答案 2 :(得分:0)
select * from Tabl
where
datepart(year, completed_date) * 100 + datepart(month, completed_date)
<
datepart(year, getDate()) * 100 + datepart(month, GetDate())