Удаление совпадающей строки из другого столбца - PullRequest
0 голосов
/ 03 февраля 2019

Я работаю в SQL Server 2014. У меня есть 2 столбца в таблице с именами Gallery Name и Address.Ниже приведены мои примеры данных из этой таблицы.

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 голосов
/ 03 февраля 2019

Предполагается, что это необходимо, только когда «Название галереи» находится в начале «Адреса».

Чтобы исправить адреса в таблице

UPDATE [YourTable]
SET [Address] = LTRIM(REPLACE([Address], [Gallery Name],''))
WHERE [Address] LIKE CONCAT([Gallery Name],'%')
0 голосов
/ 03 февраля 2019

Я бы пошел на:

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
0 голосов
/ 03 февраля 2019

Ответ на ваш запрос должен использовать 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] +'%'
...