2012-03-05 6 views
0

動的クエリ内の式を見つけて置き換える必要があります。私は私が必要なものREPLACEでのパターンの使用

'fieldA=23 OR field_1=300 OR fieldB=4' 

のような文字列型での条件は、文字列内= 300表現FIELD_1を検出し、表現FIELD_1 = 300を維持しながら、それを交換する方法を見つけることですどこのサブセットを持っています。

CHARINDEXまたはPATINDEXを使用して検出部分を実行できますが、REPLACE関数でパターンを使用する方法と、field_1パラメータの値を取得する方法を理解できません。

ありがとうございます。

答えて

1

私は、あなたが覚えようとしていることについて完全にはっきりしていません(たとえば、 "field_1 = 300"と置き換えたいと思っています)、それはあなたが探している正確な文字列 "field_1 = 300" 、または単にフィールド名、すなわち "field_1"?)。

また、これまでに書いたコードを貼り付けることはできますか?

はここで指定したフィールド名の現在の値を抽出します簡単なスクリプトです:

DECLARE @str VARCHAR(100), 
     @str_tmp VARCHAR(100), 
     @field_pattern VARCHAR(10), 
     @field_val INT; 

SET @str = 'fieldA=23 OR field_1=300 OR fieldB=4'; 
SET @field_pattern = 'field_1=' 

-- This part will extract the current value assigned to the "@field_pattern" field 
IF CHARINDEX(@field_pattern, @str) > 0 
BEGIN 
    SELECT @str_tmp = SUBSTRING(@str, 
         CHARINDEX(@field_pattern, @str) + LEN(@field_pattern), 
         LEN(@str) 
         ); 

    SELECT @field_val = CAST(SUBSTRING(@str_tmp, 1, CHARINDEX(' ', @str_tmp)-1) AS INT); 
END 

PRINT @field_val 

あなたが(例えば、「600」で、この場合の「300」を置き換える)の値そのものを交換したい場合は、

DECLARE @new_val INT; 
SET @new_val = 600; 
SET @str = REPLACE(@str, (@field_pattern+CAST(@field_val AS VARCHAR)), (@field_pattern+CAST(@new_val AS VARCHAR))); 
PRINT @str; 

これはあなたに「fieldA=23 OR field_1=600 OR fieldB=4」と表示されます。

乾杯、 デーブ

+0

ありがとうDBDave。これは私が必要としたものであり、魅力のように機能します。 – rageit

関連する問題