2017-12-21 8 views
2

私は、クエリのSQL Server 2012のSQL Server 2016 でdatedatetime種類を追加するの挙動の違いを見つけました:SQL2016でDATEADD運転中対立ではなく、2012

select convert(date,getdate())+getdate() 

私はSQL2016でエラーが出ます:

データ型dateとdatetimeは、add演算子では互換性がありません。

2012年にはエラーが返されず、日付の中核部分だけが返されます。 このような動作の理由は何ですか?

+1

2012年のどのバージョンを使用していますか?それは私のバージョンでは動作しません。とにかく怠惰な日付の計算を使うべきではありません。 DATEADDを使用する必要があります。とにかく現在の日付に現在の日付を加えた論理はどんな種類ですか?論理的には意味をなさない。それは2008R2で実行されますが、リターンは関係なく奇妙です。 –

+0

これは論理的なナンセンスだった。ある時点で、MSは、加算演算子がより新しいデータ型をサポートしないが、datetimeの後方互換性サポートを継続することを決定した。進化する。 – SMor

+0

それはほんの一例でしたが、DATEADDは明らかに優れていますが、私はそれを見つけて、どうして起こったのだろうかSQL2012のバージョンは11.0.6020.0で、2016のバージョンは13.0.4001.0 – Mat

答えて

2

SQL Server 2012では、演算子が(黙って)変更されて、不一致型が加算または減算されないようにしました。これは明らかにSQL Server 2008の日付と時刻を個別に格納する機能に関係しています。一般的なタイプにキャストする必要があります(たとえば、日付と日付と時刻のキャスト)。

私にとってはかなり大きな変化を遂げたようですが、明らかにMicrosoftが感じることが必要でした。

関連する問題