SQL Server заменяет только аббревиатуру в строке - PullRequest
0 голосов
/ 25 мая 2018

В SQL Server я очищаю строки для удаления сокращений в названии улицы:

-- Replace cl, cl., cl , with Close
SELECT @CleanedAddress = REPLACE(@CleanedAddress, 'cl', ' Close')
WHERE  @CleanedAddress LIKE '% cl'

SELECT @CleanedAddress = REPLACE(@CleanedAddress, ' cl.', ' Close')
WHERE  @CleanedAddress LIKE '% cl.'

SELECT @CleanedAddress = REPLACE(@CleanedAddress, ' cl ', ' Close ')
WHERE  @CleanedAddress LIKE '% cl %'

SELECT @CleanedAddress = REPLACE(@CleanedAddress, ' cl. ', ' Close ')
WHERE  @CleanedAddress LIKE '% cl. %'

Учитывая пример названия улицы 12 Closet Close, записанный как 12 Closet Cl Я могу успешно сопоставить, используя следующее:

SELECT @CleanedAddress = REPLACE(@CleanedAddress, 'cl', ' Close')
WHERE  @CleanedAddress LIKE '% cl'

Тем не менее, замена изменяет все вхождения 'cl', что приводит к 12 Closeoset Close

Как я могу заменить окончание "Cl" на "Закрыть", а не все вхождения "CL "и применить это для работы с тысячами строк, которые могут заканчиваться на" CL "?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы можете сделать что-то более общее, как:

SELECT @CleanedAddress = LTRIM(RTRIM(REPLACE(' ' + @CleanedAddress + ' ', ' cl ', 'Close ') ) )
WHERE  @CleanedAddress LIKE '% cl%'
0 голосов
/ 25 мая 2018

Вместо этого вы можете попробовать ПРАВУЮ строку, я специально выбрал право 3, чтобы вы искали пробел, за которым следовал cl - Это предотвращает его появление на любом названии дороги, оканчивающемся на 'cl'.

SELECT @CleanedAddress = LEFT(@CleanedAddress, len(@CleanedAddress) -3) + ' Close'
WHERE  Right(@CleanedAddress,3) = ' cl'

Другие ваши случаи, когда вы уже искали '% cl.% 'будет работать так, как есть, это просто первый, который с большей вероятностью предоставит ложные совпадения

...