如何将varchar列的值转换为int?

4

我有一个表中的列toysid,它是varchar数据类型。另外一个表也有相同的列toysid,但它的数据类型是int(我知道我可以修改第一个表的列,但我必须遵循一些程序来保持它为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

我遇到了同样的错误。该如何解决?我在许多网站上搜索,但是无法找到解决方案,请有人帮忙。


这是因为你的 study.toysid 中有一些数据无法转换为 int - Hamlet Hakobyan
2个回答

3

请确保 toysid 列中只包含数字,不要有其他字符。我怀疑该列中存在除数字以外的字符。确定后,请尝试以下查询语句。

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))

我已经尝试了这两个查询,但是仍然存在相同的错误。该列具有像001、002、003这样的值。 - viji
尝试以下查询以查找所有非数字值。 SELECT toysid FROM YOURTABLE WHERE ISNUMERIC(toysid) = 0 - Sateesh Pagolu

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接