2010-02-03 82 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