从另一列中删除匹配的字符串

时间:2019-02-03 10:46:25

标签: sql sql-server string tsql pattern-matching

我正在使用SQL Server2014。在名为Gallery NameAddress的表中有2列。下面是该表中的示例数据。

Gallery Name           Address
--------------------------------------------------------------
Boltelang              Boltelang street 12, Paris
BERG Contemporary      BERG Contemporary gorge ave, New York

像这样,我总共有207条记录。现在的问题是,我想从地址列中删除的地址列中的列Gallery Name的数据正在重复。因此,它应该是这样的在

Gallery Name          Adress
--------------------------------------------
Bltelang              street 12, Paris
BERG Contemporary     gorge ave, New York

我不知道哪个函数我可以在SQL Server使用来实现这一

3 个答案:

答案 0 :(得分:1)

查询的答案是使用REPLACE,如下所示。

UPDATE TABLE_NAME 
SET [Address] = REPLACE([Address], [Gallery Name],'')

注意:在以上查询中,REPLACE将替换[地址]中所有出现的“ [画廊名称]”。

在某些情况下,您只需要替换第一次出现的情况,而不是如果它位于中间位置的话。在这种情况下,您可以尝试执行以下操作。

 UPDATE T SET  [Address]= 
         LTRIM(STUFF([Address], CHARINDEX([Gallery Name], [Address]), LEN([Gallery Name]), ''))
    from TABLE_NAME T
    WHERE [Address] LIKE [Gallery Name] +'%'

答案 1 :(得分:1)

我会去

update t
    set address = stuff(address, 1, len(gallery_name) + 1, '')
    where address like gallery_name + ' %';

这些内容涵盖了您的问题中的示例,其中画廊名称位于地址的开头,后跟一个空格。在进行此类更改时,我非常保守。如果您有其他模式,则可以运行另一个更新来解决那些问题。

您要小心使用REPLACE(),以防地址重复画廊名称:

New York     New York 10 New York Ave

答案 2 :(得分:0)

假定仅当“图库名称”位于“地址”的开头时才需要。

更正表中的地址

UPDATE [YourTable]
SET [Address] = LTRIM(REPLACE([Address], [Gallery Name],''))
WHERE [Address] LIKE CONCAT([Gallery Name],'%')