2017-07-20 57 views
0

需要幫助編寫查詢以獲取同年前幾個月的數據。檢索除今天日期之外的同一年的所有前幾個月的數據

如果今天的日期是2017年7月20日,那麼除了今天的日期(2017年7月20日)之外,我需要檢索同年所有前幾個月的數據。

如果日期爲2017年7月20日,數據應包含2017年1月17日至2017年7月19日等。

如果日期是2017年7月21日,應該由January'17的,直到20的數據2017年7月

感謝

+1

我們很樂意提供幫助,但首先您需要告訴我們您已經嘗試了什麼。 SO不是代碼寫入服務。 –

+0

要獲取當天的00:00:00時間,您可以將其轉換爲'DATE'數據類型(刪除時間)並在必要時將其重新轉換爲'DATETIME' CAST(CAST(GETDATE()AS DATE)AS DATETIME) '。除此之外,您需要提供[MCVE]幫助我們。 – Adwaenyth

+0

我試過這個 –

回答

1
SELECT * 
FROM yourTable 
WHERE 
    dateCol >= DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AND 
    dateCol < CAST(GETDATE() AS DATE) 

Demo

+0

它不是在2017年7月19日檢索數據。它將數據發佈到2017年7月18日 –

+0

@SwatiJain檢查演示,我的查詢應該爲你工作。 –

+0

@TimBiegeleisen OP的列可能是日期時間,並且有時間部分,您的查詢將在最後一天消除。您可以在右側添加一天,並用> =和< –

1

沒有看到代碼的困難,但像這樣在where clause ...

WITH DATES AS (
SELECT GETDATE() AS MYDATE 
UNION 
SELECT CONVERT(DATETIME,'01/01/1999 12:00:00.000') 
UNION 
SELECT CONVERT(DATETIME,'01/02/2016 12:00:00.000') 
UNION 
SELECT CONVERT(DATETIME,'01/04/2007 12:00:00.000') 
UNION 
SELECT CONVERT(DATETIME,'01/05/2005 12:00:00.000') 
UNION 
SELECT CONVERT(DATETIME,'01/05/2017 12:00:00.000') 
UNION 
SELECT CONVERT(DATETIME,'01/01/2017 14:00:00.000') 
) 
SELECT * FROM DATES 
WHERE 
CONVERT(DATE,DATES.MYDATE) < CONVERT(DATE,GETDATE()) 
AND 
DATEPART(YEAR,DATES.MYDATE) = DATEPART(YEAR,GETDATE()) 
1

這是理由問題是如何得到今年1月1日,以及如何得到昨天。有很多種方法可以做到這一點。其中一種方法是在下面,其他不同想法的答案也很好。

SELECT * FROM YourTable 
WHERE YourDateCol >= DATEFROMPARTS(YEAR(GETDATE()),1,1) 
AND YourDateCol < CAST(GETDATE() AS DATE) 

對於昨天,你實際上是在今天的0點,並得到一切之前。

0

要以有效的方式完成此操作,請放置兩個變量,分別包含一年的第一天和今天的日期。

DECLARE @firstDayOfYear as DateTime; 
DECLARE @today as DateTime; 

SET @firstDayOfYear = DATEFROMPARTS(YEAR(GETDATE()),1,1); 
SET @today = CAST(GETDATE() AS DATE); 

SELECT * FROM [table] 
WHERE [dateColumnToCompare] >= @firstDayOfYear 
AND [dateColumnToCompare] < @today; 
相關問題