为什么可以从DATETIME中减去整数,而不是DATE类型

why*_*heq 7 sql-server sql-server-2012

DATETIME&INTEGER和DATE&INTEGER之间的关系是否一致?

执行得很好:

DECLARE @Yesterday DATETIME = GETDATE();
SELECT @Yesterday-1;
Run Code Online (Sandbox Code Playgroud)

就像这样:

DECLARE @Yesterday DATE = GETDATE();
SELECT @Yesterday;
Run Code Online (Sandbox Code Playgroud)

这个错误:

DECLARE @Yesterday DATE = GETDATE();
SELECT @Yesterday-1;
Run Code Online (Sandbox Code Playgroud)

我可以安全地integer从a中减去一个类型datetime而不是从a中减去一个类型date.
这种行为的原因是什么?

Ada*_*ski 7

实际上,它非常一致.DATETIME是从以前版本的sql server继承的类型.自2008年版以来,DATETIME2已经推出了添加/减去整数的可能性.您仍然可以将其DATETIME作为遗产来实现.

DATE就像DATETIME2自2008年以来一直存在,对于这种类型,也禁止添加/减少数字.

这会给你一个错误:

DECLARE @Yesterday DATETIME2 = GETDATE();
SELECT @Yesterday-1;
Run Code Online (Sandbox Code Playgroud)

所以一切都很好:).