2012-02-09 45 views
2

使用SQL Server,我有一個包含啓動日期(dateTime)的列。我想報告上個月(從觀看日期)到本月和下個月的所有內容。SQL - 從dateTime列中獲取基於月的數據

所以基本上是整整3個月的時間。

寫這個的最好方法是什麼?

回答

2

您正在尋找這樣的事情?

DECLARE 
    @StartDate DATETIME, 
    @EndDate DATETIME 

SELECT 
    @StartDate = DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) - 1, 0), 
    @EndDate = DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 2, 0) 

-- DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0), -- beginning of this month 
-- DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) - 1, 0), -- beginning of last month 
-- DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 1, 0) -- beginning of next month 
-- DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 2, 0) -- beginning of two months from now 

SELECT 
    * 
FROM 
    [Table] 
WHERE 
    [LaunchDate] >= @StartDate 
AND [LaunchDate] < @EndDate 

這會給你所有從上月的開始,兩個月從現在(整整3個月的範圍)開始之前開始結果

+0

我剛剛測試過它,它工作得很好!感謝您的快速回復! (MM,DATEDIFF(MM,0,GETDATE()) - 1,0))AND(launchDate <= DATEADD(MM,DATEDIFF(MM,0,GETDATE())+ 2,0) ) – 2012-02-09 21:17:18

-1
SELECT Foo 
FROM Bar 
WHERE LaunchDate >= DATEADD(mm, -1, GETDATE()) 
AND LaunchDate <= DATEADD(mm, 1, GETDATE()) 
+0

這不會去年初這個月(這聽起來像是OP的意圖),但會進行3個月的滾動。 – 2012-02-09 21:07:45

+0

@MarkBrackett - 「關於上個月(從查看日期)到本月和下個月之間所有內容正在啓動的所有內容的報告」這聽起來像是對我的滾動窗口請求。 – 2012-02-09 21:10:18

2

也許像SELECT /*what_you_want*/ from launches WHERE lauchDate BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()) - 1, '19000101') AND DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()) + 2, '19000101')