首页 > 解决方案 > 将 Char 转换为 Int,反之亦然

问题描述

如果不从输出中删除任何值,我无法获得正确的转换。

我想加入两张表,但一张表的主键是 a char(4),另一张表的主键是INT.

这是我到目前为止所做的:

select A.ID,
B.ID from 
TableA A
 left join tableB B on
 cast(a.ID as varchar(4) = B.ID

我意识到这不会带来个位数的值。

Table A values: 0,1,2,3,41
Table B values: 0,1,2,3,41

我的原始查询的输出只给了我 41 并且忘记了其他 4 个值。

我需要能够获得其他 4 个值

关于如何获得我想要的输出的任何想法?

标签: sqlsql-servertype-conversion

解决方案


可以转换为字符串:

select A.ID, B.ID
from  TableA A left join
      tableB B
      on cast(a.ID as varchar(4)) = B.ID;

正如我从痛苦的经验中学到的,这不能处理前导零或小数点 0。所以0.00不一样000。但是,除非有零填充,否则这对于单个数字应该没问题。

对于数字比较,请朝另一个方向前进

select A.ID, B.ID
from  TableA A left join
      tableB B
      on a.ID = try_convert(int, B.ID);

当然,真正的解决方案是修复表,使列具有相同的数据类型。


推荐阅读