如何将 varchar 列值转换为 int?

Posted

技术标签:

【中文标题】如何将 varchar 列值转换为 int?【英文标题】:How to convert varchar column values into int? 【发布时间】:2013-12-08 08:24:52 【问题描述】:

我在一个表中有一个 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

我遇到了同样的错误。如何转换它?我在许多网站上进行了搜索,但我无法获得解决方案。请任何人帮忙。

【问题讨论】:

这是因为你的study.toysid中有一个数据不能转换成int 【参考方案1】:

确保您的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 尝试下面的查询以查找所有非数字的值.. 从 YOURTABLE WHERE ISNUMERIC(toysid) = 0 中选择玩具ID【参考方案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

【讨论】:

以上是关于如何将 varchar 列值转换为 int?的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何将varchar型转换成int型

将 varchar 值“AND ID =”转换为数据类型 int 时转换失败

列值是需要转换为十进制的varchar。列名采用日期格式。 sql服务器

如何在 SQL 条件中将 INT 转换为 VARCHAR [重复]

sql 2008 中,将int数据类型如何转换为string?

将 varchar 值“%”转换为数据类型 int 时转换失败