在我的SQL Server数据库称为“项目”其中有一个叫“dateFinished”一栏的日期我有一个表中选择的所有项目。SQL服务器 - 与前一个月
我有一个脚本会在每个月的第一天运行,需要选择上个月完成的所有项目。
因此,例如,2月1日,需要选择1月1日dateFinished大于或等于00:00且小于2月1日00:00的所有项目。
它还需要在新的一年中工作(例如DEC-JAN)。
任何想法?
在我的SQL Server数据库称为“项目”其中有一个叫“dateFinished”一栏的日期我有一个表中选择的所有项目。SQL服务器 - 与前一个月
我有一个脚本会在每个月的第一天运行,需要选择上个月完成的所有项目。
因此,例如,2月1日,需要选择1月1日dateFinished大于或等于00:00且小于2月1日00:00的所有项目。
它还需要在新的一年中工作(例如DEC-JAN)。
任何想法?
你可以得到前一个月的一天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()))
这应该跨越多年的工作,并且如果该查询在以后的日子比第一个月的运行。
Select *
from items
where datefinished >= dateadd(m, datediff(m, 0, GETDATE()) - 1, 0)
AND datefinished < dateadd(m, datediff(m, 0, GETDATE()), 0)
我会被检查出DATEADD函数 http://msdn.microsoft.com/en-us/library/ms186819.aspx
简单的只是用什么我只是用:DATEDIFF(mm,dateFinished,GETDATE()) = 1
SELECT *
FROM items
WHERE DATEDIFF(mm,dateFinished,GETDATE()) = 1
+1没有功能上的表列=能够使用索引 – gbn 2010-02-03 06:45:01
@gbn:有趣,但我不认为索引能够提供一系列帮助过滤器 – Andomar 2010-02-03 10:49:25
您通常会在该类查询的计划中获得索引查找,以我的经验... – 2010-02-03 11:52:25