这是一个标量值函数,它从字符串中删除所有非字母数字字符(保留空格)。
希望它有帮助!
小提琴手
create function dbo.get_alphanumeric_str
(
@string varchar(max)
)
returns varchar(max)
as
begin
declare @ret varchar(max);
with nums as (
select 1 as n
union all select n+1 from nums
where n < 256
)
select @ret = replace(stuff(
(
select '' + substring(@string, nums.n, 1)
from nums
where patindex('%[^0-9A-Za-z ]%', substring(@string, nums.n,1)) = 0
for xml path('')
), 1, 0, ''
), ' ', ' ')
option (MAXRECURSION 256)
return @ret;
end
用法
select dbo.get_alphanumeric_str('Helloᶄ âWorld 1234⅊⅐')
回报:Hello World 1234
这个怎么运作
numsCTE 只是为了获取数字列表(如果您的字符串较长,您可以将最大值设置为256更高的值;nboption (MAXRECURSION n)用于此 CTE,但必须放在查询中)
stuff本质上是遍历字符串,使用上面的数字列表并提取长度为 1 的子字符串;检查每个字符是否与[^0-9A-Za-z ]正则表达式组匹配(0-9所有数字、A-Za-z所有小写和大写字母以及单个空格字符)
- 如果它们匹配,
patindex()则应返回 0;即索引零。
- 用于
replace(string, ' ', ' ')空格字符作为xml path返回特殊编码,请参阅此问题。
- 对重音字符使用二进制排序规则;看到这个答案