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 Extracting Data

コードをこれに減らすことができます (また、パフォーマンスも向上します)。

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 に答える