2016-05-27 8 views
0

データ型がintの一部のデータを変換しようとしています。私は年に200を変換しようとしたときにしかし、それはエラーがスローされます。SQL Server時刻を整数に変換する

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

コード:

declare @MonthStart datetime, 
     @Day int = 1, 
     @Month int = 5, 
     @Year int = 200 /*gives me an error if I input this but when I tried 2016 the code works fine*/ 

set @MonthStart = Cast(@Month as varchar(10)) +'-'+ Cast(@Day as varchar(10))+'-'+Cast(@Year as varchar(10)) 

select @MonthStart 

私はこの上の問題だか分かりません。 datetimeは、この種のフォーマット200-05-01を日付形式として受け入れないことがあります。

答えて

3

エラーが指摘したように、範囲外の値があります。 DATETIMEの最小値は次のとおりです。あなたが変換することトリングている

1753-01-01 00:00:00.000 

何ので誤差、最小値を下回っています。


marc_sでコメントしたよう:

And if you're on SQL Server 2008 or newer, you can get around this problem by using DATETIME2(3) instead of DATETIME . This new datatype doesn't have those "artificial" range limitations as the old one did.

+0

私はあなたに大きな助けとなります... –

+2

SQL Server ** 2008 **以降では、この問題を回避するには、DATETIME2(3 ) 'の代わりに' DATETIME'を使います。この新しいデータ型には、以前のものと同様に、「人工的な」範囲の制限はありません。 –

関連する問題