我试图转换一些数据类型为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
作为日期格式。
答案 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