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.
我是一名自学 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.