【问题标题】:How to solve "The conversion of a varchar data type to a datetime data type resulted in an out-of-range value." error如何解决“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”错误
【发布时间】: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 呈现时,它没有这样的歧义。

标签: sql-server datetime


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2016-02-08
    相关资源
    最近更新 更多