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单元格,但效果很好!这也不安全。阅读我之前的回复并参考帖子