SQL服务器 - 选择上个月具有日期的所有项目

jon*_*bbs 4 sql t-sql sql-server datetime

我的SQL Server数据库中有一个名为" items " 的表,其中有一个名为" dateFinished " 的列.

我有一个脚本将在每个月的第一天运行,需要选择上个月完成的所有项目.

因此,例如,在2月1日,它将需要选择dateFinished在1月1日大于或等于00:00且在2月1日小于00:00的所有项目.

它还需要跨越新的一年(例如DEC - JAN).

有任何想法吗?

Mat*_*eld 8

Select * 
  from items 
 where datefinished >= dateadd(m, datediff(m, 0, GETDATE()) - 1, 0) 
   AND datefinished < dateadd(m, datediff(m, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)

  • Andomar写道:"我不认为索引可以帮助范围过滤器." GBN写道"使用SELECT*,可能不是." 我写道"开发人员不能猜测.开发人员必须知道!" ;-)设置测试,看看你确实得到了一个INDEX SEEK.是的,我同意您将获得SELECT*的"键查找",但SELECT*没有任何内容可以阻止您获得INDEX SEEK.而且,是的,Andomar,它确实有助于范围过滤器.;-) (2认同)

And*_*mar 7

你可以获得上个月的一天dateadd(m,-1,getdate()).然后,在where子句中过滤该日期的年份和月份,如:

select *
from items
where datepart(yy,dateFinished) = datepart(yy,dateadd(m,-1,getdate()))
and datepart(m,dateFinished) = datepart(m,dateadd(m,-1,getdate()))
Run Code Online (Sandbox Code Playgroud)

这应该可以使用多年,如果查询是在比该月的第一天晚些时候运行的话.