2013-03-22 16 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

'datetime'バック、Sybaseの日に行くにint''からの暗黙的なキャスト。私はバグの可能性のある原因(誤ってdatetime列に整数値を挿入し、問題に警告しない)としてこれをしないと決めた新しいデータ型を推測します。暗黙的な変換について不平を言っている関連項目の接続要求[より堅牢な開発のためのオプションチェックを追加](http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=260762) –

+0

@MartinSmithがアップしました - 情報ありがとう – whytheq

+0

@MartinSmith - あなたは投票に投票しましたか?誰でもコメントを残していない。 OPを改訂する可能性を与えるコメントを見てよかった – whytheq

答えて

7

実際、非常に一貫しています。 DATETIMEは、SQL Serverの以前のエディションから継承された型です。 2008年版以来、DATETIME2が導入され、整数の加算/減算の可能性がなくなりました。レガシーとしてDATETIMEで引き続き行うことができます。

DATEのように、DATETIME2も2008年以降であり、このタイプの加算/減算も禁止されています。

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

だから、すべての罰金:):

これはあなたにエラーが発生します。

+1

+1情報に感謝 - 私は 'DATETIME2'を知らなかった – whytheq

1

だから、これは良いかもしれない:

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

+1情報に感謝 - 多くの回避策があります - 私はちょうど"なぜ?" – whytheq

関連する問題