删除空格并比较两个字符串

时间:2019-02-05 17:46:41

标签: sql

我想比较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的结果的代码!

2 个答案:

答案 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