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

时间:2013-03-22 12:02:03

标签: sql-server sql-server-2012

DATETIME&整数和日期& INTEGER一致吗?

执行得很好:

DECLARE @Yesterday DATETIME = GETDATE();
SELECT @Yesterday-1;

就像这样:

DECLARE @Yesterday DATE = GETDATE();
SELECT @Yesterday;

此错误:

DECLARE @Yesterday DATE = GETDATE();
SELECT @Yesterday-1;

我可以安全地从integer中减去datetime类型,但不能从date减去。{ 这种行为的原因是什么?

2 个答案:

答案 0 :(得分:7)

实际上,它非常一致。 DATETIME是从先前版本的sql server继承的类型。自2008年版以来,引入了DATETIME2,并且删除了添加/减去整数的可能性。您仍然可以在DATETIME上将其作为遗产。

DATE,与DATETIME2一样,自2008年以来一直存在,对于此类型,也禁止添加/减少数字。

这会给您一个错误:

DECLARE @Yesterday DATETIME2 = GETDATE();
SELECT @Yesterday-1;

所以一切都很好:)。

答案 1 :(得分:1)

所以这可能会更好:

declare @Yesterday DATE = DATEADD(d, -1, getdate())
select @Yesterday