正規表現 (([^(]*?(\(.*?\))?)*)(,|$)
を使用できます 一致する:
[^(]*?コード> 0 個以上 (ただしできるだけ少ない数) の開き括弧以外の文字
(\(.*?\))?
次に、必要に応じて、開き括弧と、閉じ括弧までのできるだけ少ない文字を指定します。( )*コード> ゼロ回以上繰り返されるキャプチャ グループにラップ
( )コード> 一致したアイテム全体を参照できるようにキャプチャ グループにラップ
(,|$)コード> コンマまたは文字列の終わりが続きます。
このように:
Oracle 11g R2 スキーマのセットアップ :
CREATE TABLE table_name (ID, カテゴリ) ASSELECT 1, 'ATD 5(2830),ATO 4(510),EDI 1,EH A1,SCI 2,SS 1,STO-SE 1(口頭, CNS 、血液)、STO-SE 2(経口、呼吸器への影響)' FROM DUAL;
プレ>クエリ 1 :
SELECT ID, l.COLUMN_VALUE AS item, REGEXP_SUBSTR( カテゴリ, '(([^(]*?(\(.*?\))?)*)(,|$)', 1, l.COLUMN_VALUE, NULL, 1 ) AS valueFROM table_name t CROSS JOIN TABLE( CAST( MULTISET( LEVEL BY DUAL CONNECTからレベルを選択
プレ> 結果 :
<プレ>| ID |アイテム |値 ||----|------|----------------------------------- --|| 1 | 1 | ATD 5(2830) || 1 | 2 | ATO 4(510) || 1 | 3 | EDI 1 || 1 | 4 | || EH A1 || 1 | 5 | || SCI 2 || 1 | 6 | SS1 || 1 | 7 | STO-SE 1(口腔、CNS、血液) || 1 | 8 | STO-SE 2(口腔、呼吸への影響) |
プレ>