首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从SQL Server中的字符串中剥离所有非字母字符?

如何从SQL Server中的字符串中剥离所有非字母字符?
EN

Stack Overflow用户
提问于 2009-06-17 23:16:31
回答 17查看 436.8K关注 0票数 191

如何从字符串中删除所有不是字母的字符?

非字母数字呢?

这是否必须是一个自定义函数,或者是否也有更通用的解决方案?

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2009-06-18 01:46:40

尝试此函数:

代码语言:javascript
复制
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

这样叫它:

代码语言:javascript
复制
Select dbo.RemoveNonAlphaCharacters('abc1234def5678ghi90jkl')

一旦您理解了代码,您应该会发现更改它以删除其他字符也是相对简单的。您甚至可以使其足够动态,以传入您的搜索模式。

希望能有所帮助。

票数 395
EN

Stack Overflow用户

发布于 2009-06-18 14:04:14

George Mastrosawesome answer的参数化版本

代码语言:javascript
复制
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

仅按字母排序:

代码语言:javascript
复制
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', '^a-z')

仅限数字:

代码语言:javascript
复制
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', '^0-9')

仅限字母数字:

代码语言:javascript
复制
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', '^a-z0-9')

非字母数字:

代码语言:javascript
复制
SELECT dbo.fn_StripCharacters('a1!s2@d3#f4$', 'a-z0-9')
票数 197
EN

Stack Overflow用户

发布于 2016-12-21 00:04:53

信不信由你,在我的系统中,这个丑陋的函数比G Mastros优雅的函数表现得更好。

代码语言:javascript
复制
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
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1007697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档