2017-09-13 17 views
1

私は第1列に2列のテーブルがあるとします。口座番号であり、長い文字列の第2パーソナルクライアントIDです。私は一列に各そのような結果を受け取ることができますどのように文字列では、いくつかの異なるクライアントIDがあることができ、それぞれが「ID」で始まるSQL - 文字列から複数のパターンを受け取る

|account_no | note 
|12345  | AAAAID1111BBBBID2222CCACAID3333JDBSTGDid4444 

?:

それは私の最初のIDを返します regexp_substr(upper(note), 'ID[[:digit:]]{4}')を使用して
account_no|ID 
12345  1111 
12345  2222 
... 
1234  4444 

全体の文字列から。

ループがありますか正規表現では何か手掛かりがありますか?

+1

これは役に立ちます。 https://stackoverflow.com/documentation/oracle/1968/splitting-delimited-strings#t=20170913180219287842 –

答えて

1

CONNECT BYを使用して、文字列をトラバースし、 'ID'の文字の大文字と小文字を区別しない一致を検索し、1つ以上の数字の後にオプションで最後の行をキャッチします。発見された場合は、カッコで囲むことによって示されるように、マッチの番号部分である第2のグループを取得する。

with tbl(account_no, note) as (
    select 12345, 'AAAAID1111BBBBID2222CCACAID3333JDBSTGDid4444' from dual 
) 
select account_no, 
     regexp_substr(note, '(ID(\d+))$?', 1, level, 'i', 2) ID 
from tbl 
connect by level <= regexp_count(note, 'ID\d+', 1, 'i'); 
+0

ありがとうございます! Gary_Wは完璧に動作します。パトリック、私のスキルを向上させるための素晴らしい基礎。再度、感謝します。 – alektre

関連する問題