SQL中将多个特殊字符替换为单个短横线的实现问题
解决SQL中特殊字符替换为单个短横线的问题
我懂你的困扰——现在的代码会把多个特殊字符、空格转换成一串连续的短横线,完全不是你想要的单个分隔效果。咱们来调整代码,实现所有特殊字符(包括空格、&、/等)统一替换为单个短横线,同时清理掉首尾的多余横线。
改进后的SQL代码
DECLARE @str VARCHAR(400) DECLARE @specialchars VARCHAR(50) = '%[/,~,@,#,$,%,&,*,(,),.,!^?: ]%' -- 把空格纳入特殊字符范围 -- 可切换测试不同输入示例 SET @str = '(SCARF.) / (WRAPS)' -- SET @str = 'SKIN CARE & BEAUTY SUPPLY' -- SET @str = 'BANDANAS / DURAGS / WRAPS' -- SET @str = 'HATS & MUFFLERS' -- 1. 将所有特殊字符(含空格)替换为短横线 WHILE PATINDEX(@specialchars, @str) > 0 SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX(@specialchars, @str), 1), '-') -- 2. 把连续的多个短横线合并为单个 WHILE CHARINDEX('--', @str) > 0 SET @str = REPLACE(@str, '--', '-') -- 3. 移除首尾的短横线 IF LEFT(@str, 1) = '-' SET @str = RIGHT(@str, LEN(@str) - 1) IF RIGHT(@str, 1) = '-' SET @str = LEFT(@str, LEN(@str) - 1) SELECT @str AS ConvertedResult
代码说明
- 统一替换特殊字符:把空格加入到
@specialchars集合中,无需单独处理空格,所有需要替换的字符都会先转为-。 - 合并连续短横线:通过循环把
--替换成-,直到字符串中没有连续短横线为止,彻底解决你之前遇到的SCARF-----WRAPS这类多横线问题。 - 清理首尾横线:确保最终结果的开头和结尾不会残留多余的短横线,输出格式更干净。
测试结果
- 输入
(SCARF.) / (WRAPS)→ 输出SCARF-WRAPS - 输入
SKIN CARE & BEAUTY SUPPLY→ 输出SKIN-CARE-BEAUTY-SUPPLY - 输入
BANDANAS / DURAGS / WRAPS→ 输出BANDANAS-DURAGS-WRAPS - 输入
HATS & MUFFLERS→ 输出HATS-MUFFLERS
所有示例都能得到你期望的格式。
内容的提问来源于stack exchange,提问作者Mitesh Jain
相关产品推荐
相关产品推荐

