SQL转换为Concat字符串,然后删除空格

时间:2018-09-24 12:53:16

标签: sql sql-server string

我正在尝试找出如何合并多个字段,删除它们之间的任何空格,然后将它们与另一个值进行比较。

我有以下字段:地址1,镇,县和邮政编码。 基本上,我需要将这些字符串连接起来,然后删除任何空白等。有人可以告诉我如何在以下我的以下SQL中执行此操作:

select distinct p.GtId,
    p.CrmPartyId,
    p.LegalName,
    p.BusinessClass,
    p.RmFullName,
    p.PbeFullName,
    p.OverallClientStatus,
    p.OverallRpStatus,
   a.AddressType
from CORE.WeccoParty p
    join CORE.WeccoPartyAddress a ON p.GtId = a.GtId
where exists (select 1
           from CORE.WeccoParty sub_p
           left join CORE.WeccoPartyAddress sub_a 
             on sub_p.GtId = sub_a.GtId 
           where (p.FirstName     =  sub_p.FirstName
                  and p.LastName  =  sub_p.LastName
                  and a.Address1=  sub_a.Address1
                  and a.Town = sub_a.Town
                  and a.County = sub_a.County
                  and a.Postcode = sub_a.Postcode
                  and a.GtId           <> sub_a.GtId)
          )

3 个答案:

答案 0 :(得分:0)

尝试一下:

select distinct Replace(p.GtId+
    p.CrmPartyId+
    p.LegalName+
    p.BusinessClass+
    p.RmFullName+
    p.PbeFullName+
    p.OverallClientStatus+
    p.OverallRpStatus+
   a.AddressType,' ','')
   from CORE.WeccoParty p
   join CORE.WeccoPartyAddress a ON p.GtId = a.GtId
   where exists (select 1
           from CORE.WeccoParty sub_p
           left join CORE.WeccoPartyAddress sub_a 
             on sub_p.GtId = sub_a.GtId 
           where (p.FirstName     =  sub_p.FirstName
                  and p.LastName  =  sub_p.LastName
                  and a.Address1=  sub_a.Address1
                  and a.Town = sub_a.Town
                  and a.County = sub_a.County
                  and a.Postcode = sub_a.Postcode
                  and a.GtId           <> sub_a.GtId)
          )

答案 1 :(得分:0)

您可以在SQL Server中使用REPLACECONCAT函数。

  

CONCAT函数在SQL Server 2012及更高版本中有效,如果您使用的是旧版本,请使用“ + ”运算符进行连接。

如果这是您删除字符串开头和结尾的空格的要求,您还可以检查LTRIMRTRIM函数

select distinct p.GtId,
    p.CrmPartyId,
    p.LegalName,
    p.BusinessClass,
    p.RmFullName,
    p.PbeFullName,
    p.OverallClientStatus,
    p.OverallRpStatus,
   a.AddressType
from CORE.WeccoParty p
    join CORE.WeccoPartyAddress a ON p.GtId = a.GtId
where exists (select 1
           from CORE.WeccoParty sub_p
           left join CORE.WeccoPartyAddress sub_a 
             on sub_p.GtId = sub_a.GtId 
           where (p.FirstName     =  sub_p.FirstName
                  and p.LastName  =  sub_p.LastName
                  and REPLACE(CONCAT(a.Address1,a.Town,a.County,a.Postcode),' ','') = REPLACE(CONCAT(sub_a.Address1, sub_a.Town,sub_a.County,sub_a.Postcode),' ','')
                  and a.GtId           <> sub_a.GtId)
          )

答案 2 :(得分:0)

欢迎使用StackOverflow!通过您的标记,看起来您正在使用SQL Server。 假设您是,您可以使用以下两个功能来帮助您实现目标:

替换:https://www.techonthenet.com/sql_server/functions/replace.php
CONCAT:https://www.techonthenet.com/sql_server/functions/concat.php

REPLACE函数将简单地用''代替空格,用''代替。
然后,CONCAT函数会将它们连接在一起。

如果我正在查看您的SQL代码,并尝试根据您的描述将地址1,镇,县和邮政编码连接起来,并保留当前的所有内容,我可能会这样做:

select distinct p.GtId,
    p.CrmPartyId,
    p.LegalName,
    p.BusinessClass,
    p.RmFullName,
    p.PbeFullName,
    p.OverallClientStatus,
    p.OverallRpStatus,
   a.AddressType,
   REPLACE(CONCAT(a.Address1, a.Town, a.County, a.Postcode), ' ', '')
from CORE.WeccoParty p
    join CORE.WeccoPartyAddress a ON p.GtId = a.GtId
where exists (select 1
           from CORE.WeccoParty sub_p
           left join CORE.WeccoPartyAddress sub_a 
             on sub_p.GtId = sub_a.GtId 
           where (p.FirstName     =  sub_p.FirstName
                  and p.LastName  =  sub_p.LastName
                  and a.Address1=  sub_a.Address1
                  and a.Town = sub_a.Town
                  and a.County = sub_a.County
                  and a.Postcode = sub_a.Postcode
                  and a.GtId           <> sub_a.GtId)
          )

我添加的行是:
  REPLACE(CONCAT(a.Address1, a.Town, a.County, a.Postcode), ' ', '')

该行应在这些列的CONCATENATED STRING中用“(无)”替换''(一个空格)。

让我知道这是否回答了您的问题,或者我还能提供什么帮助。