2012-05-03 15 views
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 
+0

あなたの質問に(少なくとも言語に) –

+0

と入力してください。入力パラメータがnvarcharではなくvarcharのようです。 –

+0

Gマストロスト良いキャッチ。それは働いたようだ。私はそれを見ていないとは信じられません。それは日中遅くになっているに違いない。 –

答えて

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 
+0

素晴らしい!お手伝いありがとう。私はあなたのブログをチェックアウトすることを確認します。私はあなたのコードを使用するつもりです。再度、感謝します。 –

関連する問題