SQL 服务器仅替换字符串中的缩写

SQL Server replacing only abbreviation within a string

在 SQL 服务器中,我正在清理字符串以删除街道名称中的缩写:

-- 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" 替换为 "Close" 而不是所有出现的 "CL" 并将其应用于可能以 "CL" 结尾的数千个字符串?

您可以尝试改用 RIGHT 字符串,我特别选择了右 3,这样您就可以查找 space 后跟 cl - 这样可以防止它在任何以 [ 结尾的道路名称上出现=15=]。

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

您已经在寻找 '% cl. %' 会按原样工作,它只是第一个更有可能提供错误匹配的

您可以做一些更一般的事情:

SELECT @CleanedAddress = LTRIM(RTRIM(REPLACE(' ' + @CleanedAddress + ' ', ' cl ', 'Close ') ) )
WHERE  @CleanedAddress LIKE '% cl%'