2011-02-03 16 views
1

を返された、私は正規表現の一致を構築し、コードプロジェクトのサイトの下から機能を交換し、うまく機能しているしています。 http://www.codeproject.com/KB/string/SqlRegEx.aspx?msg=3683405#xx3683405xx。 この関数は、基本的に列のテキストを検索し、一致するものを見つけ出し、置き換えられたテキストで置き換えます。私はここで後方参照を使用しました。正規表現からSQLサーバーへの挿入は、SQL Server 2008では、テキスト

列1が持っていた場合は、 '最初の記事の#345を001に9999と場所によって参照される'、それはselect文 選択COLUMN1、dbo.ufn_RegExReplace(列1、「(?\ D + 345#9999#001

を返します。 )、($ \ {first_number_match}#$ {Second_number_match}#Third_number_match '、1)は正常に動作しています。

私が望むのは、テーブルの3つの列に345#9999#001を挿入することです。

注意してください、私の実際の問題で、私は正規表現を使用する必要があります。私は専門家がこの問題に集中するように簡素化しました。

私たちが知っているように、Regexは神経を痛めつけており、SQLを使ってそれを追加しています。だから私はこれに関する助けを感謝します。 お読みいただきありがとうございます。

+0

私はあなたの質問を理解しているかわかりません。 '345#9999#001'を3つの部分に分割し、それぞれの部分を別の列に挿入しますか?または、3つの列のそれぞれに完全な文字列が必要ですか? –

+0

私はあなたのリンクに記載されている機能を理解して何から、あなたの代わりにufn_RegExReplace – Lamak

+0

パトリックEchterbruchの機能ufn_RegExSplitを使用する必要があります。はい、あなたの仮定が正しいです。ありがとう – user219628

答えて

1

あなたは、文字列のsplit関数を作成し、個々の値を取得することを使用することができます。例えば、このような何か:

CREATE FUNCTION dbo.fn_StringSplit(@String NVARCHAR(8000), @Delimiter NCHAR(1))  
RETURNS @tblItems TABLE (item NVARCHAR(8000))  
AS  
BEGIN  
    DECLARE @idx INT  
    DECLARE @slice NVARCHAR(8000)  

    SELECT @idx = 1  
     IF LEN(@String) < 1 OR @String IS NULL RETURN  

    WHILE (@idx != 0 AND LEN(@string) > 0) 
    BEGIN 
     SET @idx = CHARINDEX(@Delimiter, @String)  
     IF @idx != 0  
      SET @slice = LEFT(@String, @idx - 1)  
     ELSE  
      SET @slice = @String  

     IF(LEN(@slice) > 0) 
      INSERT INTO @tblItems(item) VALUES (@slice)  

     -- Trim saved item from remaining string 
     SET @String = RIGHT(@String, LEN(@String) - @idx)    
    END 
RETURN  
END 

代わりに、必要に応じて、単一のテーブルの行で、あなたの3つの値を返すために、上記のSplit関数を変更し、またはストアドプロシージャの3出力パラメータとして可能性があります。

+0

ありがとうnybbler、これは私が記述した例のために働くことができます。しかし、実際のシナリオでは、正規表現でテキストを抽出する必要があります。私は例を単純化した。 – user219628

関連する問題