加入相同的字段,不同的数据类型

时间:2017-03-09 18:22:19

标签: sql sql-server join temp-tables

我正在尝试使用标题为“凭证”的字段在同一服务器上连接两个表但使用不同的数据库。这些字段包含完全相同的数据,但存储为不同的数据类型。在表a上,凭证存储为nvarchar,在表b上存储为char。

当我运行我的查询时,我从表b中获得了许多凭证值。如果我分别对表运行查询,我可以看到表b中的值在连接的查询中显示为空。

这里的任何帮助都是巨大的。

2 个答案:

答案 0 :(得分:0)

Char类型附加空格以填充列长度。您需要在加入时修剪char字段,如:

left join tableB on rtrim(tableb.voucher) = tablea.voucher

答案 1 :(得分:0)

这两种数据类型应该在大多数数据库中隐式转换。它不会关心char添加的空间。

有时即使数据看起来相同,数据也不一样。请参阅下面的SQL Server代码(我正在显示那些不使用SQl Server的结果集):

创建数据

create table #temp ( id varchar (10))
create table #temp2 (id char(10))
truncate table #temp2
insert into #temp values ('test1')
insert into #temp values ('test' +Char(13))
Insert into #temp2 values ('test1')
insert into #temp2 values ('test')

查询#temp

select * from #temp

返回数据

id
test1
test 

查询#Temp2

select * from #temp2

返回数据

id
test1     
test    

加入查询

select t.id as tid , t2.id as t2id from #temp t
left join #temp2 t2 on t.id = t2.id

返回数据

tid     t2id
test1   test1     
test    NULL

正如您所看到的,如果您运行此操作,那么添加一个不可打印的字符(在这种情况下是一个回车符)会使连接中的值不再匹配。如果表中有这样的数据,那么值就不一样了。为了更具体地修复,我必须知道你正在使用什么数据库后端。