bugfix> sql > 投稿

テーブルにNARRATIONという列があり、次のような値があります。

NARRATION
-------------------------------------
BI DS NO 6005527182
BI DS NO. 485019
CI DS NO.6008364862(2000*1) 
CI DS NO.1905180207 10*1) EDDF34592845
CI DS NO.2105180520-(50*1) DDFF39844240
CI DS NO.2105180653 (2000*1) DFSD39844240
CI DS NO.1905180220/(500*3,20
CI DS NO.2105180166*(200*1) DSFSF39844240

テキストの後に最初の単語を導きたいDS NO 次のスペースまたは次のようなその他の特殊文字まで。 後にスペースが存在する場合もありますDS NO そして、私は導出する必要があるという言葉から始まります。

NARRATION                                 |DERIVE_NARRATION  
------------------------------------------|----------------
BI DS NO 6005527182                       |6005527182
BI DS NO. 485019                          |485019
CI DS NO.6008364862(2000*1)               |6008364862
CI DS NO.1905180207 10*1) EDDF34592845    |1905180207
CI DS NO.2105180520-(50*1) DDFF39844240   |2105180520
CI DS NO.2105180653 (2000*1) DFSD39844240 |2105180653
CI DS NO. 1905180220/(500*3,20            |1905180220
CI DS NO.2105180166*(200*1) DSFSF39844240 |2105180166

クエリを手伝ってください。

回答 1 件
  • regexp_substr を使用できます  必要なものを取得します。 「特殊文字」がすべてサンプルデータにリストされていると仮定すると、これは仕事をするはずです

    select narration,
           regexp_substr(narration, 'DS NO([ \.]*)([^- \\/\*(]*)', 1, 1, 'i', 2)
    from tab
    NARRATION                                 DERIVE_NARRATION
    ----------------------------------------- ----------------------------
    BI DS NO 6005527182                       6005527182
    BI DS NO. 485019                          485019
    CI DS NO.6008364862(2000*1)               6008364862
    CI DS NO.1905180207 10*1) EDDF34592845    1905180207
    CI DS NO.2105180520-(50*1) DDFF39844240   2105180520
    CI DS NO.2105180653 (2000*1) DFSD39844240 2105180653
    CI DS NO. 1905180220/(500*3,20            1905180220
    CI DS NO.2105180166*(200*1) DSFSF39844240 2105180166
    
    

    動作方法:文字列「DS NO」の後にスペースまたはドットが続き、次の文字を取得して、さらに「特殊文字」を見つけるまで [^- \\/\*(] にリストされます。 。 パラメーター2は、2番目に一致する式を取得するために使用されます。

    そのサンプルデータでは、「特別な文字」に至るまで、すべてを取得する必要があるようです。その場合は、次のように編集できます。

    regexp_substr(narration, 'DS NO([ \.]*)([0-9]*)', 1, 1, 'i', 2)
    
    

あなたの答え