2017-07-20 9 views
0

同じ年の前のすべての月のデータを取得するためのクエリを書く際に助けが必要です。今日の日付を除く同じ年の過去のすべての月のデータを取得する

今日の日付が2017年7月20日の場合、今日の日付(2017年7月20日)を除いて、同じ年の前のすべての月のデータを取得する必要があります。

日付が2017年7月20日の場合、データは1月17日から7月19日2017までのようになります。

日は2017年7月21日である場合は、データがコードにその難しいが、このような何かを見ることなく2017年7月20日までJanuary'17の

おかげ

+1

私たちは助けてもらいたいと思いますが、まずはあなたがすでに試したことを見せる必要があります。 SOはコード作成サービスではありません。 –

+0

今日の時刻を00:00:00にするには、 'DATE'データ型にキャストして(時間を削除して)、' DATETIME'にキャストし直してください。 'CAST(CAST()AS DATE) '。それ以外では、私たちがあなたを助けるために[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日のデータを取得していません。それは10月18日までのデータを提供しています2017 –

+0

@SwatiJainデモを確認してください、私のクエリはあなたのために働いているはずです。 –

+0

@TimBiegeleisen OPの列はおそらく日時であり、クエリで最後の日に排除する時間部分があります。あなたはもう1日を右側に追加し、> =と< –

1

を構成されていなければなりませんwhere節....

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

これはjusです今年の1月1日の取得方法と昨日の取得方法に関する質問。それを行うにはさまざまな方法があります。方法の1つは下にあり、さまざまなアイデアを持つ他の回答も問題ありません。

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

昨日は、実際には今日は0:00になり、その前にすべてを取得します。

0

これを効率的に行うには、年の最初の日と今日の日付を含む2つの変数を配置します。

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; 
関連する問題