web-dev-qa-db-ja.com

「 'datetime'列に値を追加すると、オーバーフローが発生しました。」

MSDNでは、次のように明確に述べられています。

Date引数は、そのデータ型の範囲外の値にインクリメントすることはできません。次のステートメントでは、日付値に追加される数値が日付データ型の範囲を超えています。次のエラーメッセージが返されます:「 'datetime'列に値を追加するとオーバーフローが発生しました。」

そして例:

SELECT DATEADD(year,2147483647, '2006-07-31');
SELECT DATEADD(year,-2147483647, '2006-07-31');

エラーの原因:

「 'datetime'列に値を追加するとオーバーフローが発生しました。」

これは正しいようです。しかし、なぜこのSQLステートメントの実行で同じエラーが発生するのですか?

SELECT DATEDIFF(YY,'1013-12-12',DATEADD(YY,-300,getdate()))

より具体的かつ唯一:

SELECT DATEADD(YY,-300,getdate())
11
gotqn

'sql datetime range'の最初のグーグル結果 。 1753年1月1日。それがあなたの下限です。

追加された質問へのコメント この雑学クイズ この下限の起源について。

13
Sam DeHaan

フィールドを使用してDateTime変換を行う場合は、変換でcaseステートメントを使用して、フィールドが1より大きいかどうかを確認しますOR 1000000)、この問題は発生しなくなります。

1
Mel van Wyk