1

私は次のようなデータを持っています

BR_TheDailyBeast.com__ROS_BN_DT_ROS Leaderboard_SUB_728x90
BR_CNET_ROS_BN_DT_Cnet reviewsAddedValueMid-pageMPU_SUB_300x250

O/P # BN と BN

実際の O/P # ROS および BN

3 番目と 4 番目のアンダースコアの間を抽出する必要があります。' を使用[^_]+',1,4すると、適切に抽出されますが、そのようなデータはどこでも__単一のアンダースコアを扱っています。

ロジックを解析する際に、これらのケースをどのように処理すればよいですか。

これについて私に提案してください。

ありがとう!!

4

2 に答える 2

1

これを使用できます。

regexp_substr(your_string, '_([^_]*)', 1, 3, null, 1)

通常の substr および instr 関数を単純に使用することもできます。

substr(your_string, 
       instr(your_string,'_',1,3) + 1,
       instr(your_string,'_',1,4) - instr(your_string,'_',1,3) - 1
      )
于 2013-11-05T11:02:03.273 に答える
0

この解決策を試すことができます:

SELECT
  regexp_substr('BR_TheDailyBeast.com__ROS_BN_DT_ROS Leaderboard_SUB_728x90', '_+([^_]*)', 1, 3, NULL, 1) AS val1,
  regexp_substr('BR_CNET_ROS_BN_DT_Cnet reviewsAddedValueMid-pageMPU_SUB_300x250', '_+([^_]*)', 1, 3, NULL, 1) AS val2
FROM dual;

出力:

VAL1 VAL2
---- ----
BN BN   
于 2013-11-05T11:00:38.173 に答える