Oracle: カンマ区切りの値を複数の列に分割する
この記事では、特に CSV 文字列内の null または空の要素を扱う場合に、Oracle SQL でカンマ区切り値 (CSV) を効率的に分割するという課題について説明します。 REGEXP_SUBSTR
を使用した標準的なアプローチは、これらの場合に失敗する可能性があります。
堅牢なソリューションでは、洗練された正規表現パターン (.*?)(,|$)
を利用します。このパターンは、NULL と空のエントリを効果的に処理します。パターンを分析してみましょう:
(.*?)
: この部分は、貪欲にではなく (.
)、任意の文字 (*
) を 0 回以上 (?
) キャプチャします。 これにより、次のカンマ (または文字列の末尾) までの文字のみがキャプチャされるようになります。(,|$)
: これは、カンマ (,
) または文字列の末尾 ($
) のいずれかに一致します。これは各値を区切る区切り文字として機能します。この改善されたパターンにより、CSV 文字列内に null または空のエントリが含まれる場合でも、値の正確な抽出が保証されます。 たとえば、文字列「1,2,3,,5,6」から 5 番目の値を抽出するには、次のクエリを使用します:
<code class="language-sql">REGEXP_SUBSTR('1,2,3,,5,6', '(.*?)(,|$)', 1, 5, NULL, 1)</code>
このアプローチは、NULL が存在する場合に誤った値を取得するという一般的なエラーを回避し、Oracle で CSV データを解析するための信頼できる方法を提供します。
以上がOracle で NULL を含むカンマ区切り値を複数の列に効率的に分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。