2010-02-03 54 views
4

在我的SQL Server数据库称为“项目”其中有一个叫“dateFinished”一栏的日期我有一个表中选择的所有项目。SQL服务器 - 与前一个月

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

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

它还需要在新的一年中工作(例如DEC-JAN)。

任何想法?

回答

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

这应该跨越多年的工作,并且如果该查询在以后的日子比第一个月的运行。

8
Select * 
    from items 
where datefinished >= dateadd(m, datediff(m, 0, GETDATE()) - 1, 0) 
    AND datefinished < dateadd(m, datediff(m, 0, GETDATE()), 0) 
+0

+1没有功能上的表列=能够使用索引 – gbn 2010-02-03 06:45:01

+0

@gbn:有趣,但我不认为索引能够提供一系列帮助过滤器 – Andomar 2010-02-03 10:49:25

+1

您通常会在该类查询的计划中获得索引查找,以我的经验... – 2010-02-03 11:52:25

1

简单的只是用什么我只是用:DATEDIFF(mm,dateFinished,GETDATE()) = 1

SELECT * 
FROM items 
WHERE DATEDIFF(mm,dateFinished,GETDATE()) = 1