SQL Server将int转换为Datetime

时间:2016-05-27 03:11:19

标签: sql-server datetime

我试图转换一些数据类型为int的数据。但是,当我尝试将200转换为年份时,会抛出错误:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

代码:

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作为日期格式。

2 个答案:

答案 0 :(得分:3)

正如错误所指出的,您有一个超出范围的值。 DATETIME的最小值为:

1753-01-01 00:00:00.000

您要转换的内容低于最低值,因此错误。

由marc_s评论:

  

如果您使用的是SQL Server 2008或更高版本,则可以解决这个问题   使用DATETIME2(3)代替DATETIME的问题。这个新的数据类型   不像旧的那样具有那些“人为的”范围限制。

答案 1 :(得分:2)

您可以使用datetime2代替datetime。它支持1-1-0001或更晚的日期。 https://msdn.microsoft.com/en-us/library/bb677335.aspx