如何解决“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”错误

Posted

技术标签:

【中文标题】如何解决“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”错误【英文标题】:How to solve "The conversion of a varchar data type to a datetime data type resulted in an out-of-range value." error 【发布时间】:2016-10-27 08:07:03 【问题描述】:
select top 10  
    FormANo, Created, Changed 
from 
    FormA 
where  
    Created >= convert(datetime, '2015-07-05 14:04:11.000') 
    and Created <= convert(datetime, '2016-04-21 20:13:08.280')

当我运行查询时,我收到以下错误

消息 242,第 16 级,状态 3,第 4 行 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

如何在 SQL Server 2014 中使用原始 SQL 查询来解决这个问题?

【问题讨论】:

Created 列的数据类型是什么? 如果你运行它们,两者都转换返回正确的值。您确定这是您要转换的值吗? 您的 Created 列的 DataType 是什么? .Net 为您提供了一个我认为您需要的函数 Convert.ToDateTime() 使用 Convert.ToDateTime 并确保您使用相同的日期格式。也许 .Net 会尝试将您的年份转换为一天或某事。 使用明确的日期格式。使用T 分隔日期和时间,而不是空格。 SQL Server 有一些规则,它可以将aaaa-aa-aa aa:aa:aa.aaa(其中a 代表一个数字)解释为yyyy-dd-MM hh:mm:ss.sss,尽管据我所知没有文化实际上使用这种日期格式.当使用aaaa-aa-aaTaa:aa:aa.aaa 呈现时,它没有这样的歧义。 【参考方案1】:

SQL Server 很可能正在尝试以您提供的另一种格式解析您的数据。

您可以使用this 表中的值之一设置格式:

convert(datetime, '2016-04-21 20:13:08.280', 121)

121 = yyyy-mm-dd hh:mi:ss.mmm(24h)

【讨论】:

以上是关于如何解决“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何解决包冲突问题

如何解决包冲突问题

如何解决ajax跨域问题

MySQL 的 10048问题,如何解决?

如何解决smartgit的冲突问题

如何解决https传输图片的问题