2

我有这个查询:

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

它说:

从 varchar 到 datetime 的转换生成了超出范围的值。

你能帮我吗?:(

4

4 回答 4

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 中的语言/区域/日期格式设置,它可能被解释为2012 年第 20 个月的第 8 天,当然,那第 20 个月的排序不存在..... :-)

于 2012-08-21T08:38:28.910 回答
0

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

于 2012-08-21T10:03:08.160 回答
0

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

update table 
set initTime = CONVERT(DateTime, '2012-08-20 09:30:00.000')
WHERE id='0124'
于 2012-08-21T10:22:36.590 回答
0

尝试在您的陈述之前使用此命令。我认为您的语言设置中有另一个 DAY/MONTH 订单:

SET DATEFORMAT ymd;
于 2012-08-21T11:06:59.593 回答