如何从字符串中删除所有不是字母的字符?
非字母数字呢?
这是否必须是一个自定义函数,或者是否也有更通用的解决方案?
发布于 2009-06-18 01:46:40
尝试此函数:
Create Function [dbo].[RemoveNonAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^a-z]%'
While PatIndex(@KeepValues, @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')
Return @Temp
End
这样叫它:
Select dbo.RemoveNonAlphaCharacters('abc1234def5678ghi90jkl')
一旦您理解了代码,您应该会发现更改它以删除其他字符也是相对简单的。您甚至可以使其足够动态,以传入您的搜索模式。
希望能有所帮助。
发布于 2009-06-18 14:04:14
George Mastros的awesome answer的参数化版本
CREATE FUNCTION [dbo].[fn_StripCharacters]
(
@String NVARCHAR(MAX),
@MatchExpression VARCHAR(255)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
SET @MatchExpression = '%['+@MatchExpression+']%'
WHILE PatIndex(@MatchExpression, @String) > 0
SET @String = Stuff(@String, PatIndex(@MatchExpression, @String), 1, '')
RETURN @String
END
仅按字母排序:
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', '^a-z')
仅限数字:
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', '^0-9')
仅限字母数字:
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', '^a-z0-9')
非字母数字:
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', 'a-z0-9')
发布于 2016-12-21 00:04:53
信不信由你,在我的系统中,这个丑陋的函数比G Mastros优雅的函数表现得更好。
CREATE FUNCTION dbo.RemoveSpecialChar (@s VARCHAR(256))
RETURNS VARCHAR(256)
WITH SCHEMABINDING
BEGIN
IF @s IS NULL
RETURN NULL
DECLARE @s2 VARCHAR(256) = '',
@l INT = LEN(@s),
@p INT = 1
WHILE @p <= @l
BEGIN
DECLARE @c INT
SET @c = ASCII(SUBSTRING(@s, @p, 1))
IF @c BETWEEN 48 AND 57
OR @c BETWEEN 65 AND 90
OR @c BETWEEN 97 AND 122
SET @s2 = @s2 + CHAR(@c)
SET @p = @p + 1
END
IF LEN(@s2) = 0
RETURN NULL
RETURN @s2
https://stackoverflow.com/questions/1007697
复制相似问题