我有这个问题:
update table
set initTime = '2012-08-20 09:30:00.000'
WHERE id='0124'
它说:
从varchar转换为datetime会产生超出范围的值。
你能帮帮我吗?:(
答案 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;