Sql 转换varchar datetime时出错

Sql 转换varchar datetime时出错,sql,sql-server,datetime,varchar,Sql,Sql Server,Datetime,Varchar,我有一个疑问: update table set initTime = '2012-08-20 09:30:00.000' WHERE id='0124' 上面写着: 从varchar到datetime的转换生成了一个超出范围的值 您能帮我一下吗?:(为了安全起见,您应该为日期字符串使用独立于语言的日期格式: UPDATE dbo.table SET initTime = '2012-08-20T09:30:00.000' WHERE id = '0124' 看到差异了吗?我在日期和

我有一个疑问:

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

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


您能帮我一下吗?:(

为了安全起见,您应该为日期字符串使用独立于语言的日期格式:

UPDATE dbo.table 
SET initTime = '2012-08-20T09:30:00.000' 
WHERE id = '0124'
看到差异了吗?我在日期和时间部分之间添加了一个
T
。这使它成为一个有效的ISO-8601日期/时间字符串,并且无论您使用何种SQL Server语言和区域设置,它都应该可以工作


没有中间的代码<代码> t/COD>中间,它不是一个正确的ISO-8601日期/时间字符串,取决于SQL Server中的语言/区域/数据格式设置,它可能被解释为2012个月的第八天,当然,第二十个月的SORTA不存在……:-)/P>< P>或使用YYYYMMD HH:MM:SS格式。你可以在这篇文章中找到更多关于明确格式的信息


将其转换为datetime,然后将其输入表中

update table 
set initTime = CONVERT(DateTime, '2012-08-20 09:30:00.000')
WHERE id='0124'
在陈述之前尽量使用。我认为您的语言设置中还有另一个日/月顺序:

SET DATEFORMAT ymd;

您使用的是哪个SQL Server版本?我尝试用相同的语句更新AdventureWorksDW.DimTime中的datetime单元格,但效果很好!这也不安全。阅读我之前的回复并参考帖子