需要幫助編寫查詢以獲取同年前幾個月的數據。檢索除今天日期之外的同一年的所有前幾個月的數據
如果今天的日期是2017年7月20日,那麼除了今天的日期(2017年7月20日)之外,我需要檢索同年所有前幾個月的數據。
如果日期爲2017年7月20日,數據應包含2017年1月17日至2017年7月19日等。
如果日期是2017年7月21日,應該由January'17的,直到20的數據2017年7月
感謝
需要幫助編寫查詢以獲取同年前幾個月的數據。檢索除今天日期之外的同一年的所有前幾個月的數據
如果今天的日期是2017年7月20日,那麼除了今天的日期(2017年7月20日)之外,我需要檢索同年所有前幾個月的數據。
如果日期爲2017年7月20日,數據應包含2017年1月17日至2017年7月19日等。
如果日期是2017年7月21日,應該由January'17的,直到20的數據2017年7月
感謝
SELECT *
FROM yourTable
WHERE
dateCol >= DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AND
dateCol < CAST(GETDATE() AS DATE)
它不是在2017年7月19日檢索數據。它將數據發佈到2017年7月18日 –
@SwatiJain檢查演示,我的查詢應該爲你工作。 –
@TimBiegeleisen OP的列可能是日期時間,並且有時間部分,您的查詢將在最後一天消除。您可以在右側添加一天,並用> =和< –
沒有看到代碼的困難,但像這樣在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日,以及如何得到昨天。有很多種方法可以做到這一點。其中一種方法是在下面,其他不同想法的答案也很好。
SELECT * FROM YourTable
WHERE YourDateCol >= DATEFROMPARTS(YEAR(GETDATE()),1,1)
AND YourDateCol < CAST(GETDATE() AS DATE)
對於昨天,你實際上是在今天的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;
我們很樂意提供幫助,但首先您需要告訴我們您已經嘗試了什麼。 SO不是代碼寫入服務。 –
要獲取當天的00:00:00時間,您可以將其轉換爲'DATE'數據類型(刪除時間)並在必要時將其重新轉換爲'DATETIME' CAST(CAST(GETDATE()AS DATE)AS DATETIME) '。除此之外,您需要提供[MCVE]幫助我們。 – Adwaenyth
我試過這個 –