2016-06-01 4 views
0

私はすべての結果を引き出す必要があるクエリに取り組んでいます。日付は今から1年前です。したがって、クエリが明日実行される場合、結果は今日実行された場合とは少し異なります。私は今日それを実行する場合、それは基本的に "日付は2015年6月1日から6/1/2016の間です"と似ています。明日、2015年6月2日から2016年6月2日までのように続きます。どこからBETWEEN(1年前)AND(現在)

私は、日付を含む通常のWHERE句と同じフォーマットしかできないと考えました。これは私が持っているものです。

WHERE CreateDate BETWEEN (DATEADD(Year,-1,GETDATE()) AND (GetDATE()) 

まず、DATEADD()部分は、私が使うべきものである場合、私はわからない - 私はちょうど私は別のフォーラムで読んでいたものに基づいて、それを試してみました。第二に、私はANDの近くに文法エラーがあることを私に伝える赤い波打ちがあります。

これについてはどのような方法が最適ですか?

答えて

2

をあなたはDATEADDを使用することができますし、とても日付に年を追加することは安全であるべきうるう年を認識していますたとえ閏年に走ったとしても(私はまだ余分な安全性を保ち、日数を追加することを好むが、うるう年に実行したときの振る舞いに依存する)。

構文エラーの原因は、かっこです。私はを見ているだけです。が閉じています。あなたが望むと思う。

​​
+0

〜facepalm〜それはいつも小さなものですね。それがただあなたに伝えることができれば、曖昧なものではなく、かっこが問題です。ありがとう! – EJF

1

クエリ内の余分な五角形(を削除します。

WHERE CreateDate BETWEEN cast(DATEADD(yyyy,-1,GETDATE()) as date) AND cast(GETDATE() as date) 

は、日付の時間部分を無視 getdate()dateとして1年を減算した結果を変換する castを使用します。これは、 createdateのデータ型が dateであることを前提としています。

+1

これはうるう年にはあまり効果がありません。 (それは確かに解決するのが難しいだろう)。 – Chipmonkey

1

あなたがそれを持っているか年として使用してください。それはうるう年を考慮していますので、日を使用しないでください:

WHERE CreateDate BETWEEN DATEADD(Year,-1,GETDATE()) AND GETDATE() 

または

WHERE CreateDate BETWEEN DATEADD(mm,-12,GETDATE()) AND GETDATE() 
関連する問題