次の2つの方法の違いは何だろうと思っていました。
GETUTCDATE()-2
そして
DATEADD(d,-2,GETUTCDATE())
DATEADD
を使用するのが正しい方法だと思いますが、なぜだろうと思っていましたか?
そこには実際の違いはありませんが、DATETIME2
値、またはDATETIME2
値を返す関数の使用を開始すると、エラーが発生します。
SELECT SYSDATETIME() - 1 AS [Incompatible]
メッセージ206、レベル16、状態2、行17オペランドタイプの衝突:datetime2はintと互換性がありません
これらについては、日付の数学関数を使用する必要があります。
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
アーロンバートランドは、この問題について、彼の Bad Habits to Kick シリーズで簡潔に述べています。
他の回答のいずれかの主張とは異なり、両方のオプションはSQL Serverによって正式にサポートされています および文書化されています :_datetime - number
_ですではありません未定義の動作。
の大きな利点
_DATEADD(d, -2, GETUTCDATE())
_
それが自己文書化であるという事実です:その目的はすぐに明らかです。
一方、GETUTCDATE() - 2
は、読者が_datetime - number
_操作の定義を知っていることを前提としています。はい、現在は慣用的なT-SQLである可能性がありますが、これが_datetime2
_でサポートされなくなったという事実は、将来の世代のSQL Server開発者がこれに慣れていない可能性があることを意味します。