0

我有一个基本上从选择中去除数字的功能。此功能适用于基于英语的字符集。我有一组由非英文字符(中文、日文、印度文等)组成的新数据,但我没有得到预期的效果。我正在使用该NVarchar集合来存储任何可能是非英语的记录。以下是我目前正在使用的功能。任何建议都会非常有帮助。

GO
/****** Object:  UserDefinedFunction [dbo].[StripVenName]    Script Date: 05/03/2012 16:24:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[StripVenName] (@InString as VarChar(8000))                           
RETURNS NVarChar(100) AS                            
BEGIN                           
    Declare @ReturnVal as NVarchar(4000)                        
    Declare @OutString as NVarchar(4000)                        
    Declare @Pos as smallint                        
    Declare @CurChar as NVarChar(1)                     

    IF LEN(@InString) = 0                       
        SET @ReturnVal = ''                 
    ELSE                        
    BEGIN                       
        Set @Pos = 1                    
        SET @OutString = ' '                    
        WHILE (@Pos <= Len(@InString))                  
        BEGIN                   
            Set @CurChar =  SUBSTRING(@InString, @Pos, 1)               
            if ASCII(@CurChar) between 65 and 90 or ASCII(@CurChar) between 97 and 122              
                SET @OutString = @OutString +   @CurChar            
            Set @Pos = @Pos + 1             
        END                 

        if len(@OutString) = 0                  
            SET @OutString = @InString              
        SET @ReturnVal = LTRIM(RTRIM(@OutString))                   
    END                     
RETURN @ReturnVal                           

END 
4

1 回答 1

0

几年前我写了一篇关于这个的博客。该博客解释了如何删除字母,但您想删除数字。有关SQL Server 提取数据的完整说明,请参阅博客

您的代码可以简化为这个(它也会表现得更好)。

Create Function [dbo].[RemoveNumericCharacters](@Temp NVarChar(1000))
Returns NVarChar(1000)
AS
Begin

    While PatIndex(N'%[0-9]%', @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex(N'%[0-9]%', @Temp), 1, N'')

    Return @Temp
End
于 2012-05-03T20:55:06.267 回答