是varchar
类型,并且我需要改变为decimal (18,2)
类型的列,因为在数据库中的列的值是十进制和我需要更改所有栏目,请帮助我。转换VARCHAR到int
回答
不工作:将数据类型varchar转换为数字时出错。 – 2012-03-03 18:20:27
@ManojWadhwani:那么在这种情况下,你的'varchar'列中必须有一些数据不是**真的是'int'。过滤出来,删除或更正这些行 - 然后再试一次 – 2012-03-03 18:22:35
是的,我编辑了我的答案,以显示如何查找有效投射的值。 ISNUMERIC(COLUMN)= 1告诉你数值,ISNUMERIC(COLUMN)<> 1告诉你无效的值。正如@marc_s所说,你将需要删除或更正非数字行,否则什么都不会起作用。 – 2012-03-03 18:37:14
尝试转换
http://msdn.microsoft.com/en-us/library/ms187928.aspx
这样的事情
alter table sqlTable add newColumn
UPdate sqlTable
Set newColumn = convert(decimal(18,2),oldcolumn)
alter table sqlTable drop oldcolumn
同样的错误:将数据类型varchar转换为数字时出错。 – 2012-03-03 18:26:53
要迁移数据 - 如果这确实是你的要求 - 你可能最好关闭添加一个新列的表,做一个更新成列,检查数据,然后下降旧的专栏。如果你想保留原始的列名,你可以重复这个过程。
所以
1. alter table mytable add myNewColumn int
(或十进制(18,2),这取决于你的要求)
2.更新mytable的组myNewColumn = cast(myOldColumn as int) or convert(int, myOldColumn)
- 见http://msdn.microsoft.com/en-us/library/ms187928.aspx
3.目视检查数据
4. alter table mytable drop myOldColumn
尝试但得到相同的错误:alter table TestData alter column [NET_ACCOUNTED] [decimal](18,2)NULL – 2012-03-03 18:30:01
我不是建议你改变一列 - 而是你添加一个新的所需数据类型的列,并获得数据进入它。根据其他反馈 - 您需要检查使用ISNUMERIC将数据识别为数字。如果您遇到特定行的问题,哪些数据无法转换? – kaj 2012-03-03 20:18:26
- 1. 转换INT到VARCHAR
- 2. PostgreSQL - 将varchar转换为int?
- 3. SQL将int转换为varchar
- 4. 将Varchar 3转换为int
- 5. 从VARCHAR转换值为int
- 6. SQL:错误转换VARCHAR到int
- 7. SQL转换varchar(255)到int(11)
- 8. SQL Server转换失败varchar到int
- 9. 误差变换VARCHAR转换成int
- 10. 将列var上的varchar转换为int列转换为int
- 11. 转换失败而转换为varchar到int背后
- 12. VARCHAR到DATATIME转换
- 13. 转换VARCHAR到钱
- 14. 转换VARCHAR到DATETIME
- 15. 如何将varchar列值转换为int?
- 16. int和varchar之间的隐式转换
- 17. 将varchar转换为mysql中的int
- 18. Ms Sql将varchar转换为Big Int
- 19. 将varchar值的转换溢出int列
- 20. 将varchar转换为Int SQL SERVER
- 21. SQL Server:将varchar转换为INT
- 22. 转换失败varchar数据类型int
- 23. 如何将Int转换为Varchar
- 24. 将varchar值“”....“'转换为数据类型int时转换失败
- 25. 将varchar值转换为int时出现转换失败
- 26. SQL - 将varchar值转换为Int时转换失败
- 27. SQL转换的VARCHAR值转换为数据类型为int
- 28. 将varchar值转换为int时转换失败
- 29. 将varchar值转换为数据类型时转换失败int
- 30. 转换失败将varchar转换为Int - 使用Concat
也许你应该调查哪些行不与小数匹配,并将其包含在你的问题中。看起来人们正在用正确的代码解决你的问题,但你还没有给出解决你真正问题所需的所有参数。 – 2012-03-03 20:40:51
你显然在你的列中有数据是**不是**数字 - 使用'SELECT(cols)FROM dbo.YourTable WHERE ISNUMERIC(yourcolumn)= 0'找到它;清理那些数据,然后**然后再试一次... – 2012-03-03 20:48:31