ホームページ >データベース >mysql チュートリアル >Oracle で文字列を複数の行に効率的に分割するにはどうすればよいですか?
データベース操作では、多くの場合、文字列を個々の行に分割する必要があります。 Oracle は、特にバージョン 10g 以降で、このタスクを管理するための効果的な方法を提供します。
シンプルだが強力な手法として、正規表現と connect by
句を使用します。これには、一時テーブルを構築し、正規表現関数を使用して部分文字列を抽出することが含まれます:
<code class="language-sql">with temp as ( select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual union all select 109, 'test2', 'Err1' from dual ) select distinct t.name, t.project, trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error from temp t, table(cast(multiset(select level from dual connect by level <= length(regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels;</code>
temp
CTE (共通テーブル式) はサンプル データをシミュレートします。length(regexp_replace(t.error, '[^,] ')) 1
は、カンマ区切りの値をカウントすることでエラーの数を決定します。select level from dual connect by level <= ...
は、1 からエラー数までの一連の数値を生成します。table(cast(multiset(...) as sys.OdciNumberList))
は、数値シーケンスを使用可能なコレクションに変換します。temp
を数値コレクションと結合し、必要なすべての組み合わせを作成します。trim(regexp_substr(t.error, '[^,] ', 1, levels.column_value))
は、生成された数値を位置インジケーターとして使用して各エラーを抽出します。このメソッドは、データの整合性を維持しながら、複数の値を含む文字列を個別の行に効率的に分割します。
以上がOracle で文字列を複数の行に効率的に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。