2013-03-22 61 views
7

DATETIME & INTEGER與DATE & INTEGER之間的關係是否一致?爲什麼可以從DATETIME中減去整數而不是DATE類型

此執行罰款:

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

至於做這個的:

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

此錯誤:

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

我可以安全地從一個datetime而不是減去一個integer類型date
這種行爲的原因是什麼?

+7

從'int'到'datetime'的隱式轉換追溯到到Sybase天。我猜想對於新的數據類型,他們決定不把它作爲錯誤的可能原因(意外地將整數值插入到「datetime」列中,而不是提醒問題)。一個相關的連接項請求抱怨隱式轉換[爲更強大的開發添加可選檢查](http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=260762) – 2013-03-22 12:10:16

+0

@MartinSmith提高 - 感謝您的信息 – whytheq 2013-03-22 12:19:02

+0

@MartinSmith - 你投票結束了嗎?誰做的沒有留下任何評論;很高興看到評論,因爲它可以修改OP – whytheq 2013-03-22 12:22:08

回答

7

其實它很一致。 DATETIME是從以前版本的sql server繼承的類型。自2008年版以來,已引入DATETIME2,並刪除了加/減整數的可能性。作爲遺產,您仍然可以在DATETIME上完成。

DATE,像DATETIME2自2008年以來一直存在,並且對於這種類型加/減數字也是禁止的。

這給你一個錯誤:

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

所以,一切都很好:)。

+1

+1感謝信息 - 我沒有意識到'DATETIME2' – whytheq 2013-03-22 12:26:23

1

所以這可能會更好:

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

- +1感謝您的信息 - 有很多解決方法 - 我只是想知道「爲什麼?」 – whytheq 2013-03-22 12:20:45

相關問題