SQL Server: найти и заменить часть определенной части строки, которая встречается в строке более одного раза
Я владелец малого бизнеса, который самоучка SQL Server для управления почтовыми данными. Этот ресурс помог мне много раз в прошлом, глядя на вопросы других людей, однако, это первый раз, когда задаю вопрос. Использование SQL Server 2017.
В адресной колонке я хочу поменять сокращения на прописанные слова. Например, я хочу изменить "St" на "Street". Я знаю, как выполнить базовый поиск и замену в T-SQL, но я сталкиваюсь с тем, что, если 'St' находится в названии фактического названия улицы, оно также меняется. Например, "123 Stripe St" становится "123 Streetripe Street". Мой желаемый результат будет "123 Stripe Street".
Я использую следующее
UPDATE Person
SET Addr = REPLACE(Addr, 'St', 'Street')
WHERE Addr like '%St'
Может ли кто-нибудь помочь мне заменить только сокращенную часть адреса?
Любая помощь очень ценится.
2 ответа
Нормализация адресов может быть скользким. Вы можете быть удивлены вариациями бул. Вот почему я предлагаю вам взглянуть на стандартизацию адресов в базе данных
Тем не менее, здесь есть простой и легко расширяемый вариант
пример
Declare @YourTable table (id int,Addr varchar(150))
Insert Into @YourTable values
(1,'123 Stripe St')
,(2,'555 SW Main St, Providence, RI')
Update @YourTable
Set Addr = ltrim(rtrim(
replace(
replace(' '+Addr+' ',' St ',' Street ')
,' St, ',' Street, ')
))
Select * from @YourTable
Возвращает
id Addr
1 123 Stripe Street
2 555 SW Main Street, Providence, RI -- Notice middle St with a comma.
Для этого конкретного примера вы можете сделать:
UPDATE Person
SET Addr = LEFT(Addr, LEN(Addr) - 2) + 'Street'
WHERE Addr like '% St';
Однако для более общих паттернов в середине строки это будет более сложным. SQL Server не является оптимальным инструментом для этого типа манипулирования строками.