【问题标题】:Error conversion varchar datetime错误转换 varchar datetime
【发布时间】:2012-08-16 13:43:35
【问题描述】:

我有这个问题:

update table 
set initTime = '2012-08-20 09:30:00.000' 
WHERE id='0124'

它说:

从 varchar 到 datetime 的转换产生了一个超出范围的值。

你能帮帮我吗?:(

【问题讨论】:

  • 您使用的是哪个 SQL Server 版本?我尝试使用相同的语句更新 AdventureWorksDW.DimTime 中的日期时间单元格,它运行良好!

标签: sql sql-server datetime varchar


【解决方案1】:

为了安全起见,您应该对日期字符串使用与语言无关的日期格式:

UPDATE dbo.table 
SET initTime = '2012-08-20T09:30:00.000' 
WHERE id = '0124'

看到区别了吗?我在日期和时间部分之间添加了T。这使它成为一个有效的 ISO-8601 日期/时间字符串,无论您有什么 SQL Server 语言和区域设置,它都应该有效。

如果没有中间的 T,它就不是一个正确的 ISO-8601 日期/时间字符串,并且根据您在 SQL Server 中的语言/区域/日期格式设置,它可能被解释为 第 8 天2012 年第 20 个月,当然,第 20 个月不存在..... :-)

【讨论】:

    【解决方案2】:

    或使用 YYYYMMDD HH:MM:SS 格式。您可以在这篇文章中找到有关明确格式的更多信息 http://beyondrelational.com/modules/2/blogs/70/posts/10898/understanding-datetime-column-part-ii.aspx

    【讨论】:

      【解决方案3】:

      将其转换为日期时间,然后将其输入表中。

      update table 
      set initTime = CONVERT(DateTime, '2012-08-20 09:30:00.000')
      WHERE id='0124'
      

      【讨论】:

        【解决方案4】:

        尝试在您的陈述之前使用this command。我认为您的语言设置中有另一个 DAY/MONTH 顺序:

        SET DATEFORMAT ymd;
        

        【讨论】:

        • 这也不安全。阅读我之前的回复并参考帖子
        猜你喜欢
        • 2021-11-04
        • 1970-01-01
        • 2016-12-09
        • 2019-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 2010-09-09
        相关资源
        最近更新 更多