2017-12-06 6 views
0

私は、DATETIMEフィールドが2つ、OpeningDateとFinishingDateのテーブルを持っています。SQLは、すべてのレコードを別の日付よりも先に(月末まで)返す

私は、OpeningDateから正確に16ヶ月先のFinishingDateを持つすべてのレコードを返すクエリを作成しようとしています。

SELECT * FROM Sales 
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate) 

をしかし、私に、私はそれが最後まですべてのレコードを取得する必要があります(唯一の月の日まで)これらの日付の間に入るすべてのレコードを与えるために表示されます。

私が試してみました今月の。

したがって、2017年から10年(2017-04-06)の182カ月先のOpeningDateがあるとします。これには4月6日までのレコードのみが含まれますので、4月末までにレコードを含める必要があります。

これを達成するためにクエリにどのような変更を加えることができますか?

助けがあれば助かります。

ありがとうございます!

+0

テーブル構造をデータとともに表示してください。 –

+0

EOMONTHを使用してOpeningDateを月末に変換します。SELECT * FROM Sales OpeningDateとDATEADDの間のFinishingDate(MONTH、16、EOMONTH(OpeningDate)) – EagerToLearn

答えて

0

あなたはこのコードを使用することができ、

SELECT * FROM Sales 
WHERE FinishingDate between OpeningDate AND 
DATEADD(MONTH, 18, EOMONTH(OpeningDate)) 

注:

DATEADD(MONTH, 18, EOMONTH(OpeningDate)) 

EOMONTH OpeningDateの終わりを見つけ、その後DATEADDは、その日に18ヶ月を追加します。その日から18ヶ月の終了日が正確に与えられます。

+0

ありがとうございました! – Mark

0

あなたは、単に私が私のSQLサーバー上でそれを試してみました。この

SELECT * FROM Sales 
WHERE FinishingDate = DATEADD(MONTH, 16, Convert(datetime,OpeningDate)) 

を試すことができますし、それは私と一緒に正常に動作します。

関連する問題