加入不适用于两个相同的字段

时间:2016-11-28 13:40:24

标签: sql sql-server sql-server-2008

我正在尝试在sql server 2008上加入两个表。

select *
from TABLE1 a
left join TABLE2 b
on a.cont_id = b.cont_id 

但是,它无法连接任何数据。

a.cont_id 属于 nvarchar (255)类型, b.cont_id 属于 varchar (80) 。以任何方式使用CAST都没有帮助。

由于 a.cont_id 仅包含数值数据,因此我首先使用了float和integer类型以及应用了cast函数,但这并没有解决任何问题。

我使用以下查询检查了他们的varbinary代码

select cont_id, CAST(cont_id AS varbinary) AS BinaryCode
from Table1 
where cont_id = '53126124'

select cont_id, CAST(cont_id AS varbinary) AS BinaryCode
from Table2
where cont_id = '53126124'

我得到了这两个结果

cont_id     BinaryCode
53126124    0x4189551F60000000


cont_id     BinaryCode
53126124    0x3533313236313234

还有一个信息 - 表1是从邻居国家(捷克共和国)创建的excel文档导入的。

对于源表,这是一个例子,如果有帮助的话。

 cont_id    C1      C2   C3
 53126124   3       31   510
175553321   5       16       510

并且

dt      cont_id   D1  D2
201610  53126124  0   0 
201610  175553321 41  520  

你知道如何处理这个问题吗?

1 个答案:

答案 0 :(得分:0)

好的,我想我已经明白了:

*

结果为SELECT CAST(CAST(53126124 AS FLOAT) AS VARBINARY) ,而此

0x4189551F60000000

结果为SELECT CAST('53126124' AS varbinary) ,而此

0x3533313236313234

返回SELECT CAST(53126124 AS varbinary)

第一个值是0x032AA3EC的varbinary表示,FLOAT的第二个和VARCHAR的最后一个。

显然第一个不是INT

浮点类型往往不精确,可能会有一个很小的值,如VARCHAR1,0000000001,它被视为0.999999998,但不相等。

你可以试试这个:

1