我无法在不删除输出值的情况下进行正确的转换。
我想联接两个表,但是一个表的主键是一个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个值
关于如何实现期望的表现的任何想法吗?
答案 0 :(得分:0)
我刚刚使用临时表对此进行了测试,并且一切都按预期进行(我确实添加了结束语)
)
create table #tableA(id int)
insert #tablea (id) values (0), (1), (2), (3), (41)
create table #tableb(id char(4))
insert #tableb (id) values (0), (1), (2), (3), (41)
select A.ID,
B.ID from
#TableA A
left join #tableB B on
cast(a.ID as varchar(4)) = B.ID
答案 1 :(得分:0)
您可以转换为字符串:
select A.ID, B.ID
from TableA A left join
tableB B
on cast(a.ID as varchar(4)) = B.ID;
正如我从痛苦的经验中学到的,这不能处理前导零或零小数。因此,0.00
与000
不同。但是,除非填充零,否则这对于个位数应该没问题。
对于数字比较,请朝另一个方向
select A.ID, B.ID
from TableA A left join
tableB B
on a.ID = try_convert(int, B.ID);
当然,真正的解决方案是修复表,使列具有相同的数据类型。