SQL 服务器:查找并替换在字符串中多次出现的特定字符串部分

SQL Server : find and replace part of a specific part of string that appears more than once in a string

我是一名自学 SQL 服务器来管理邮件数据的小企业主。这个资源在过去帮助我看了很多次其他人的问题,但是,这是第一次提出问题。使用 SQL 服务器 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'

有人可以帮我只替换地址的缩写部分吗?

非常感谢任何帮助。

对于这个特定的例子,你可以这样做:

UPDATE Person
    SET Addr = LEFT(Addr, LEN(Addr) - 2) + 'Street'
    WHERE Addr like '% St';

但是,对于字符串中间更一般的模式,这将变得更具挑战性。 SQL 服务器不是此类字符串操作的最佳工具。

规范化地址可能是一个滑坡。您可能会对 Blvd 的变化感到惊讶。这就是为什么我建议你看一下

说到这里,这里有一个简单易扩展的选项

例子

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

Returns

id  Addr
1   123 Stripe Street
2   555 SW Main Street, Providence, RI  -- Notice middle St with a comma.