sqlserver中特殊符合处理存储过程

木思丁 2026-9-14 3 9/14
CREATE FUNCTION [dbo].[remove_special_char]
(
    @str NVARCHAR(1000)
)
RETURNS NVARCHAR(1000)
AS
BEGIN
    DECLARE @Result NVARCHAR(1000) = @str;

    -- NULL 或空串直接返回
    IF @Result IS NULL OR @Result = N''
        RETURN @Result;

    -- =====================================================
    -- 1. 不可见空白字符(全部位置删除)
    -- =====================================================
    SET @Result = REPLACE(@Result, NCHAR(9),     N'');   -- Tab 制表符
    SET @Result = REPLACE(@Result, NCHAR(10),    N'');   -- 换行 LF
    SET @Result = REPLACE(@Result, NCHAR(13),    N'');   -- 回车 CR
    SET @Result = REPLACE(@Result, NCHAR(160),   N'');   -- NBSP 不换行空格
    SET @Result = REPLACE(@Result, NCHAR(12288), N'');   -- 全角空格
    SET @Result = REPLACE(@Result, NCHAR(8203),  N'');   -- 零宽空格 ZWSP
    SET @Result = REPLACE(@Result, NCHAR(65279), N'');   -- BOM 零宽不换行空格

    -- =====================================================
    -- 2. 圆括号 / 方括号 / 花括号(中英文 + 全角)
    -- =====================================================
    SET @Result = REPLACE(@Result, NCHAR(40),    N'');   -- (
    SET @Result = REPLACE(@Result, NCHAR(41),    N'');   -- )
    SET @Result = REPLACE(@Result, NCHAR(65288), N'');   -- (
    SET @Result = REPLACE(@Result, NCHAR(65289), N'');   -- )
    SET @Result = REPLACE(@Result, NCHAR(91),    N'');   -- [
    SET @Result = REPLACE(@Result, NCHAR(93),    N'');   -- ]
    SET @Result = REPLACE(@Result, NCHAR(12304), N'');   -- 【
    SET @Result = REPLACE(@Result, NCHAR(12305), N'');   -- 】
    SET @Result = REPLACE(@Result, NCHAR(65339), N'');   -- [
    SET @Result = REPLACE(@Result, NCHAR(65341), N'');   -- ]
    SET @Result = REPLACE(@Result, NCHAR(123),   N'');   -- {
    SET @Result = REPLACE(@Result, NCHAR(125),   N'');   -- }
    SET @Result = REPLACE(@Result, NCHAR(65371), N'');   -- {
    SET @Result = REPLACE(@Result, NCHAR(65373), N'');   -- }

    -- =====================================================
    -- 3. 引号(中英文 + 全角 + 直角引号)
    -- =====================================================
    SET @Result = REPLACE(@Result, NCHAR(34),    N'');   -- "
    SET @Result = REPLACE(@Result, NCHAR(39),    N'');   -- '
    SET @Result = REPLACE(@Result, NCHAR(8220),  N'');   -- “
    SET @Result = REPLACE(@Result, NCHAR(8221),  N'');   -- ”
    SET @Result = REPLACE(@Result, NCHAR(8216),  N'');   -- ‘
    SET @Result = REPLACE(@Result, NCHAR(8217),  N'');   -- ’
    SET @Result = REPLACE(@Result, NCHAR(65282), N'');   -- "
    SET @Result = REPLACE(@Result, NCHAR(65287), N'');   -- '
    SET @Result = REPLACE(@Result, NCHAR(12300), N'');   -- 「
    SET @Result = REPLACE(@Result, NCHAR(12301), N'');   -- 」
    SET @Result = REPLACE(@Result, NCHAR(12302), N'');   -- 『
    SET @Result = REPLACE(@Result, NCHAR(12303), N'');   -- 』

    -- =====================================================
    -- 4. 书名号 / 尖括号
    -- =====================================================
    SET @Result = REPLACE(@Result, NCHAR(12298), N'');   -- 《
    SET @Result = REPLACE(@Result, NCHAR(12299), N'');   -- 》
    SET @Result = REPLACE(@Result, NCHAR(12296), N'');   -- 〈
    SET @Result = REPLACE(@Result, NCHAR(12297), N'');   -- 〉
    SET @Result = REPLACE(@Result, NCHAR(60),    N'');   -- <
    SET @Result = REPLACE(@Result, NCHAR(62),    N'');   -- >

    -- =====================================================
    -- 5. 其他常见符号
    -- =====================================================
    SET @Result = REPLACE(@Result, NCHAR(183),   N'');   -- ·
    SET @Result = REPLACE(@Result, NCHAR(8226),  N'');   -- •

    -- =====================================================
    -- 6. 首尾半角空格 trim
    -- =====================================================
    SET @Result = LTRIM(RTRIM(@Result));

    RETURN @Result;
END;
GO

 

- THE END -
Tag:
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论

您必须 后可评论