2010-12-08 12 views
1
select substr(e.orgmessage, 40, 50) as one, 
     orgmessage as original_message 
    from table 

列1における結果は次のとおりです。私は私のパターンに応じて部分文字列を使用して値を取得したい

00 02182 00363 00008 O PKR  500 01983 00319 

が、元の文字列は次のとおりです。

09:22:12 CASH COUNTERS(C) PKR  1000 02182 00363 00008 O PKR  500 01983 00319 00315 O ***  0 00000 00000 00000 N ***  0 00000 00000 00000 N 

私がすることができません私が望むものを返すために部分文字列を取得する。 500と1000のような値が必要です。フィールドのデータ型はVARCHAR2(1000 Byte)です。

+0

ここで、あなたの質問は何ですか?これは、パラメータが(source_string、position、length)であるsubstrのドキュメントを見るのと同じくらい簡単ですか?それとももっと複雑ですか?また、コードを選択してエディタ(101010)のコードボタンを押すと、読みやすくなります。 –

答えて

0

INSTRを使用して、ソース文字列内の部分文字列の位置を見つけ、substrを使用してその位置から解析します。

0

あなたの文字列が毎回規則的なパターンに従うなら、あなたは2つの値を簡単に引き出すことができます。サンプルストリングの500と1000は、PKRインジケーターの後に来ます。文字列が正規の場合、値は文字33と69の前後に始まり、9文字ごとに実行されます。我々が使用することができます使用:

select substr(txt, 33, 9) value1, 
     substr(txt, 69, 9) value2 
    from (select '09:22:12 CASH COUNTERS(C) PKR  1000 02182 00363 00008 O PKR  500 01983 00319 00315 O ***  0 00000 00000 00000 N ***  0 00000 00000 00000 N' txt 
      from dual 
     ) 

返す:

VALUE1 VALUE2 
--------- --------- 
    1000  500 

1 row selected. 

あなたの文字列が正規でない場合、あなたはPKRの後に9つの文字を引き出し、各PKRで文字列を分割し、する必要があり、単純なsubstrよりも見栄えの良いSQLを使用する必要があります。