2017-07-27 8 views
1

次の入力xmlフィールドは、6文字の部分文字列にする必要があり、それぞれ6文字を分割して出力のオプションフィールドに保存する必要があります。文字列を複数の値に分割するためのESQL

Input: 
<feature>124414500045563879</feature> 

output: 
<option>124414</option> 
<option>500045</option> 
<option>563879</option> 

上記の結果を得るためにIIB ESQLで利用できるトークナイザ関数はありますか?

答えて

1

私が知る限り、ESQLにString Tokenizer関数はありません。

しかし、目標を達成するために、次の手順を基本として使用できます。このメソッドは、DelimのSをEnv(Environment.Split.Array []) の配列に分割し、それを再充填する前にEnvironment.Splitを削除します。

あなたの場合、デリムは必要ありません。サブストリング部分で固定長で作業する必要があります。

CREATE PROCEDURE Split (IN S CHARACTER, IN Env REFERENCE, IN Delim CHARACTER) 
BEGIN 
    DECLARE P INTEGER; 
    DECLARE Idx INTEGER 1; 

    SET Env.Split = NULL; 

    REPEAT 
     SET P = POSITION(Delim IN S); 
     IF P = 0 THEN 
     SET Env.Split.Array[Idx] = S; 
     ELSE 
     SET Env.Split.Array[Idx] = LEFT(S, P - 1); 
     SET S = SUBSTRING(S FROM P + LENGTH(Delim)); 
     SET Idx = Idx + 1; 
     END IF; 
    UNTIL P = 0  
    END REPEAT;  
END; 

出典:http://www.mqseries.net/phpBB2/viewtopic.php?p=97845&

+0

ありがとう、あなたはvincentです。私は上記のアプローチを試みます。 – ranaa

+0

私は上記のアプローチに従って、出力を釘付けにしました。 – ranaa

+0

@ranaaそれを読むのはうれしい! (:うまくいけば、この回答を受け入れるように設定することができます。 – VincentS

0

別の解決策は、ビットストリームとしての機能の値をとることから、新たなBLOBメッセージを構築し、それが中にトークンを説明するメッセージの定義を使用して再解析持っている可能性がありその値。再解析後、新しい論理メッセージをさらに処理できます。

関連する問題