我想比较2个表,看看他们的其中一列的值是相同的。下面是写的代码:
select T1.TaskCMPLTDetails,T2.TaskCMPLTDetails, T1.RequestID,T2.RequestID, t1.ProtocolID,t2.ProtocolID, t1.BuildCMPLTDT, t2.BuildCMPLTDT
From table as T1 inner join table as T2
on T1.ProtocolID = T2.ProtocolID
where REPLACE(LTRIM(RTRIM(T1.TaskCMPLTDetails)), ' ', ' ') <> REPLACE(LTRIM(RTRIM(T2.TaskCMPLTDetails)), ' ', ' ')
and t1.BuildCMPLTDT=t2.BuildCMPLTDT
而且,这里是我回来的结果; (复制仅一排):
Y,Val,2017,1158, Y, Val, 2017, 1158, 2017 2017 1158 1158 1900-01-01 1900-01-01
正如你可以在结果看,TaskCMPLTDetails对于两个表是相同的,为什么我看?该代码应该返回DONOT具有相同TaskCMPLTDetails的结果!
有了这个说法:
REPLACE(LTRIM(RTRIM(T1.TaskCMPLTDetails)), ' ', ' ')
你用1个空格替换每两个相邻的空间。 因此,当你列的值中有3位是这样的:
'A B' (3 spaces)
结果将是:
'A B' (2 spaces)
因为在初始值仅2相邻空间经1个空间取代,
所以这一结果还含有2米相邻的空间。
该REPLACE
功能的作用只有一次,而不是递归,直到没有任何两个相邻的空间,以便一次又一次地更换。
你的问题的解决方案是比较它们事先取出两列的所有空间,因为该列包含逗号分隔值所以不会有不必要在这种情况下,值的连接(或者所以从您发布的样本数据似乎):
where REPLACE(T1.TaskCMPLTDetails, ' ', '') <> REPLACE(T2.TaskCMPLTDetails, ' ', '')
你可以使用一个简单的修剪()TRIM(T1.TaskCMPLTDetails)<> TRIM(T2.TaskCMPLTDetails)
select T1.TaskCMPLTDetails
,T2.TaskCMPLTDetails
, T1.RequestID
,T2.RequestID
, t1.ProtocolID
,t2.ProtocolID
, t1.BuildCMPLTDT
, t2.BuildCMPLTDT
From table as T1
inner join table as T2 on T1.ProtocolID = T2.ProtocolID
where TRIM(T1.TaskCMPLTDetails) <> TRIM(T2.TaskCMPLTDetails)
and t1.BuildCMPLTDT=t2.BuildCMPLTDT