如何将varchar列值转换为int?

时间:2013-11-23 12:07:12

标签: sql sql-server-2008 type-conversion sqldatatypes

我在一个表中有一个toysid数据类型的列varchar。另一个表具有相同的列toysidint数据类型(我知道我可以修改第一个表的列,但我必须遵循一些过程将其保留为varchar)。

我写了以下查询来加入表:

select study.toysid 
from study 
join concepts on study.toysid = concepts.toysid

查询返回错误:

  

转换失败,将varchar数据类型转换为int

因此我尝试过以下查询:

select study.toysid 
from study 
join concepts on convert(int, study.toysid) = concepts.toysid

我得到了同样的错误。如何转换呢?我在很多网站上搜索过,但我无法得到解决方案。请任何人帮忙。

2 个答案:

答案 0 :(得分:2)

确保玩具栏中没有数字以外的任何内容。我怀疑该列中还有其他字符而不是数字。如果您确定,请尝试以下查询..

select study.toysid 
from study join concepts 
on cast(study.toysid as int) = concepts.toysid

select study.toysid 
from study join concepts 
on cast(study.toysid as varchar(100)) = cast(concepts.toysid as varchar(100))

答案 1 :(得分:2)

您可以省略具有非数字值的记录,然后使用如下所示的整数进行强制转换:

select Mystudy.toysid 
from concepts 
     join (Select study.toysid From study WHERe ISNUMERIC(study.toysid)= 1) As MyStudy 
          on convert(int, MyStudy.toysid) = concepts.toysid