在我的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