2017-01-04 8 views
0

にint型と互換性がありません。次のクエリが動作します。オペランドタイプ衝突:日付がDATEADD

select dateadd(m, -5, getdate() - datepart(d, getdate()) + 1)

しかし、私は特定の日付でgetdate()を交換しようとしたとき、以下の例:

select dateadd(m, -5, (convert(DATE,'2017-01-04') - (datepart(d, getdate()) + 1)))

エラーが表示されるOperand type clash: date is incompatible with int

私は間違っていましたか?

+0

ニュアンス。日付で数学をやっているときにいつでもdateaddを使用して、この問題を再び心配する必要はありません。 – scsimon

答えて

2

GETDATE()戻っDATETIMEデータ型は、あなたがDate値でDatetime値で-1+1を行うことはできませんがためです。

クエリを少し変更した場合は、Dateの代わりにdatetimeに変換しても問題ありません。

select dateadd( m 
       , -5 
       , (convert(DATETIME,'2017-01-04') - (datepart(d, getdate()) + 1))) 

           ^-- Datetime instead of Date 
+0

ああ、私はこれで4時間を費やしていて、 'DATETIME'データ型については考えていません。愚かな私! –