错误转换varchar datetime

时间:2012-08-21 08:36:39

标签: sql sql-server datetime varchar

我有这个问题:

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

它说:

  

从varchar转换为datetime会产生超出范围的值。

你能帮帮我吗?:(

4 个答案:

答案 0 :(得分:2)

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

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个月的sorta不存在.....: - )

答案 1 :(得分:0)

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

答案 2 :(得分:0)

将其转换为日期时间,然后将其提供给表格。

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

答案 3 :(得分:0)

在声明之前尝试使用this command。我想你的语言设置还有另一个DAY / MONTH命令:

SET DATEFORMAT ymd;