如何解决“将 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 数据类型导致值超出范围。”错误的主要内容,如果未能解决你的问题,请参考以下文章