web-dev-qa-db-ja.com

GETUTCDATE()-2とDATEADD(d、-2、GETUTCDATE())

次の2つの方法の違いは何だろうと思っていました。

 GETUTCDATE()-2  

そして

  DATEADD(d,-2,GETUTCDATE())

DATEADDを使用するのが正しい方法だと思いますが、なぜだろうと思っていましたか?

13
newbie

そこには実際の違いはありませんが、DATETIME2値、またはDATETIME2値を返す関数の使用を開始すると、エラーが発生します。

SELECT SYSDATETIME() - 1 AS [Incompatible]

メッセージ206、レベル16、状態2、行17オペランドタイプの衝突:datetime2はintと互換性がありません

これらについては、日付の数学関数を使用する必要があります。

SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]

アーロンバートランドは、この問題について、彼の Bad Habits to Kick シリーズで簡潔に述べています。

14
Erik Darling

他の回答のいずれかの主張とは異なり、両方のオプションはSQL Serverによって正式にサポートされています および文書化されています :_datetime - number_ですではありません未定義の動作。

の大きな利点

_DATEADD(d, -2, GETUTCDATE())
_

それが自己文書化であるという事実です:その目的はすぐに明らかです。

一方、GETUTCDATE() - 2は、読者が_datetime - number_操作の定義を知っていることを前提としています。はい、現在は慣用的なT-SQLである可能性がありますが、これが_datetime2_でサポートされなくなったという事実は、将来の世代のSQL Server開発者がこれに慣れていない可能性があることを意味します。

8
Heinzi