我想比较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都相同,为什么我看到这个?应该返回不具有相同TaskCMPLTDetails的结果的代码!
答案 0 :(得分:2)
使用以下语句:
REPLACE(LTRIM(RTRIM(T1.TaskCMPLTDetails)), ' ', ' ')
您将每2个相邻的空格替换为1个空格。
因此,当您的列的值中包含3个空格时,如下所示:
'A B' (3 spaces)
结果将是:
'A B' (2 spaces)
因为在初始值中,只有2个相邻的空格被1个空格代替,
因此该结果还包含2个相邻的空格。
REPLACE
函数仅作用一次,而不是递归作用,因此要一次又一次地替换,直到没有相邻的2个空格为止。
解决您的问题的方法是在比较它们之前先从两个列中删除所有空格,因为这些列包含逗号分隔的值,因此在这种情况下不会出现不必要的值联接(或者从您发布的示例数据):
where REPLACE(T1.TaskCMPLTDetails, ' ', '') <> REPLACE(T2.TaskCMPLTDetails, ' ', '')
答案 1 :(得分:0)
您可以使用简单的trim()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