如何在Sql的where子句中获取此条件

时间:2014-03-28 19:30:30

标签: sql sql-server sql-server-2008 tsql

我有一个查询,它给了我上个月的完整数据

select * from Tabl
where  datepart(month, completed_date) = DATEPART(month, getDate())-1 
and datepart(year, completed_date) = datepart(year, getDate())

但是当当前日期是在1月时,它给了我错误的数据

如果当前月份是1月,如何编写条件以返回正确的数据?

3 个答案:

答案 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())