请求编写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
相关产品推荐
相关产品推荐

