我想在2列上使用Inner Join
加入2个表,两个列都是(nvarchar, null)
类型。 2列中包含相同的数据,但连接条件失败。我认为这是由于列值中包含的空格。
我已尝试LTRIM
,RTRIM
也
我的查询:
select
T1.Name1, T2.Name2
from
Table1 T1
Inner Join
Table2 on T1.Name1 = T2.Name2
我也尝试过这样:
on LTRIM(RTRIM(T1.Name1)) = LTRIM(RTRIM(T2.Name2))
我的数据:
Table1 Table2
------ ------
Name1(Column) Name2(Column)
----- ------
Employee Data Employee Data
Customer Data Customer Data
当我使用
检查2个表格中的我的数据时选择T1.Name1,len(T1.Name1)作为Length1,Datalength(T1.Name1)作为DataLenght1从Table1 T1
从表2 T2选择T2.Name2,len(T2.Name2)作为Length2,Datalength(T2.Name2)作为DataLenght2
结果是2个表的Length和DataLength值不同,对于2个表,它们不相同。
我无法更改2个表格中的原始数据。我该如何解决这个问题。
谢谢
答案 0 :(得分:0)
联盟没有特殊的平等规则。相等运算符始终以相同的方式工作。因此,如果a = b,则a = b上的连接将起作用。因此,<>湾
检查这些字段的内容。虽然你认为它们不同,但它们不会是一样的:
select convert(varbinary(max), myCol) from T
Unicode具有不可见的字符(这似乎只会造成麻烦)。
答案 1 :(得分:0)
declare @t table (name varchar(20))
insert into @t(name)values ('Employee Data'),('Customer Data')
declare @tt table (name varchar(20))
insert into @tt(name)values ('EmployeeData'),('CustomerData')
select t.name,tt.name from @t t
INNER JOIN @tt tt
ON RTRIM(LTRIM(REPLACE(t.name,' ',''))) = RTRIM(LTRIM(REPLACE(tt.name,' ','')))
答案 2 :(得分:0)
我会遵循以下架构