You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写MS SQL Server 2012函数:提取英文数字与字母内容

在SQL Server 2012中实现字符过滤函数

我帮你写了一个适合SQL Server 2012的自定义标量函数,刚好能满足你的需求——只保留指定字符(对应你示例里的大写英文字母、数字、连字符和空格),处理后得到你想要的结果。

函数代码

CREATE FUNCTION dbo.FilterEnglishAlphanumeric
(
    @InputString NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @Result NVARCHAR(MAX) = ''
    DECLARE @Index INT = 1
    DECLARE @Char NCHAR(1)
    
    -- 逐个遍历输入字符串的每个字符
    WHILE @Index <= LEN(@InputString)
    BEGIN
        SET @Char = SUBSTRING(@InputString, @Index, 1)
        -- 判断字符是否属于允许保留的范围:大写字母、数字、空格、连字符
        IF (ASCII(@Char) BETWEEN 65 AND 90) -- A-Z
            OR (ASCII(@Char) BETWEEN 48 AND 57) -- 0-9
            OR ASCII(@Char) = 32 -- 空格
            OR ASCII(@Char) = 45 -- 连字符"-"
        BEGIN
            SET @Result = @Result + @Char
        END
        SET @Index = @Index + 1
    END
    
    -- 清理连续空格和首尾空格(可选,让结果更整洁)
    WHILE CHARINDEX('  ', @Result) > 0
    BEGIN
        SET @Result = REPLACE(@Result, '  ', ' ')
    END
    SET @Result = LTRIM(RTRIM(@Result))
    
    RETURN @Result
END

使用方法

直接调用这个函数并传入你的字符串即可:

SELECT dbo.FilterEnglishAlphanumeric('TEKA תנור ביל דין in HLB-840 P-WH לבן') AS FilteredResult

运行这段代码后,你会得到预期的结果:TEKA HLB-840 P-WH

灵活调整

如果你的需求有变化,比如:

  • 想要保留小写英文字母:在IF判断里加上 OR (ASCII(@Char) BETWEEN 97 AND 122) 就行,这样示例里的"in"也会被保留,结果变成 TEKA in HLB-840 P-WH
  • 不需要保留空格或连字符:直接从IF条件里移除对应的判断语句即可

内容的提问来源于stack exchange,提问作者Shoma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:19:45