sql >> データベース >  >> RDS >> Oracle

Oracle正規表現を使用して文字列からすべての数値シーケンスを引き出す方法は?

    これを試してください:

    with t(d) as (
      select '<efwewfsdf/>
    <asdf>
    <qwe>
    <rej:aaa ns2=rnsjvnsvjrlntjnbsnbltdbk">64-0203-0875/4</rej:aaa>
    <rej:bbb ns2=bmtbrbpnrtusrnbdbd k">06396</rej:bbb>
    <rej:ccc ns2=vmkfbkmbkfmgkmfgkbgfk">4567650</rej:ccc>
    <rej:ddd ns2=zxczxczczxczxczxk">402341198</rej:ddd>
    <rej:eee ns2=asdasdasdazxck">723112</rej:eee>
    <rej:eee ns2=adasdasdawawqweqwek">342253</rej:eee>
    <rej:eee ns2=bgbgfnnhnhnhnhnhnk">656345</rej:eee>
    <rej:fff ns2=ewretyrtyghnk">352</rej:fff>
    <rej:ggg ns2="vzxczdvdbdfgs">asd.Gdsa</rej:ggg>
    <rej:hhh ns2="zcsasdqwfwgerbyn">W1_22</rej:hhh>
    </qwe>
    </asdf>' from dual 
    ), t1(d) as (
    select SUBSTR(d, REGEXP_INSTR(d, '<[A-Za-z]{3}:', 1, level), REGEXP_INSTR(d, '</rej:[A-Za-z]{3}>', 1, level) - REGEXP_INSTR(d, '<[A-Za-z]{3}:', 1, level))
      from t
    connect by rownum < LENGTH(d) - LENGTH(REGEXP_REPLACE(d, ':[A-Za-z]{3}>', ''))
    )
    select REGEXP_REPLACE(d, '^<rej:.*">', '') ff from t1
    
    FF
    --------------
    64-0203-0875/4
    06396
    4567650
    402341198
    723112
    342253
    656345
    352
    asd.Gdsa
    W1_22
    



    1. Oracleで数値を含まない行を返す2つの方法

    2. Oracleに日付を挿入

    3. SQLでbool値を設定する方法

    4. MySQL ORDERBY[カスタムSETフィールド値]