GETUTCDATE()-2 与 DATEADD(d,-2,GETUTCDATE())

new*_*bie 13 sql-server t-sql sql-server-2014

我想知道以下两种方法之间的区别是什么:

 GETUTCDATE()-2  
Run Code Online (Sandbox Code Playgroud)

  DATEADD(d,-2,GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)

我想使用DATEADD是正确的方法,但想知道为什么?

Eri*_*ing 14

那里没有真正的区别,但是当您开始使用DATETIME2值或返回DATETIME2值的函数时,您会遇到错误。

SELECT SYSDATETIME() - 1 AS [Incompatible]
Run Code Online (Sandbox Code Playgroud)

消息 206,级别 16,状态 2,第 17 行操作数类型冲突:datetime2 与 int 不兼容

对于这些,您必须使用日期数学函数。

SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Run Code Online (Sandbox Code Playgroud)

Aaron Bertrand 在他的Bad Habits to Kick系列中简要谈到了这个问题。


Hei*_*nzi 8

与其他答案之一中的声明相反,SQL Server正式支持和记录这两个选项:datetime - number不是未定义的行为。

的大优势

DATEADD(d, -2, GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)

事实是它是自我记录的:它的目的是显而易见的。

GETUTCDATE() - 2,另一方面,依赖于读者了解datetime - number操作的定义。是的,它目前可能是惯用的 T-SQL,但不再支持它的事实datetime2意味着未来几代 SQL Server 开发人员可能不再熟悉它。