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

时间:2019-01-05 00:21:23

标签: sql sql-server string sql-server-2017 find-replace

我是一个小型企业所有者,他自学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 个答案:

答案 0 :(得分:2)

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

的原因

上面提到的,这是一个简单易扩展的选项

示例

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.

答案 1 :(得分:1)

对于此特定示例,您可以执行以下操作:

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

但是,对于字符串中间的更多常规模式,这将变得更具挑战性。对于这种类型的字符串操作,SQL Server并不是最佳工具。