SQL Server仅替换字符串中的缩写

时间:2018-05-25 10:21:41

标签: sql sql-server string replace data-cleaning

在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 :(得分:2)

你可以试试一个正确的字符串,我已经专门去了右边3,这样你就可以寻找一个空格,然后是cl - 这可以防止它在任何道路名称上结束' cl& #39 ;.

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

您已经在寻找'%cl的其他情况。 %'会像它们一样工作,只是第一个更有可能提供错误匹配的

答案 1 :(得分:0)

你可以做一些更通用的事情:

[334.0, 223.0, 41.0, 819.0]