ホームページ >データベース >mysql チュートリアル >Oracle でカンマ区切り値を列に効率的に分割するにはどうすればよいですか?
Oracle: カンマ区切り値を列に効率的に解析する
データ処理では、多くの場合、カンマ区切り値 (CSV) を個々の列に分割する必要があります。 Oracle は、正規表現を使用した効率的なソリューションを提供します。これは、多数の値 (この場合は最大 255) を扱う場合に特に有益です。 これにより、列ごとに SUBSTR()
関数を繰り返す煩雑な作業が回避されます。
課題: 最大 255 個のカンマ区切りの値を個別の列に抽出します。
解決策: REGEXP_SUBSTR()
キーは REGEXP_SUBSTR()
関数と次の正規表現です:
<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, COLUMN_NUMBER, NULL, 1)</code>
正規表現を理解する:
(.*?)
: 任意の文字 (.
) に 0 回以上 (*
)、貪欲に一致しません (?
)。これにより、次のカンマまでのみがキャプチャされるようになります。(,|$)
: カンマ (,
) または文字列の末尾 ($
) のいずれかに一致します。これにより値が区切られます。1
: 最初にキャプチャされたグループ (カンマを除いた値自体) を返すように指定します。COLUMN_NUMBER
: どの値 (列) を抽出するかを示します (最初の場合は 1、2 番目の場合は 2 など)。NULL
、1
: これらのパラメーターは、大文字と小文字を区別しない一致と最初の出現の選択に使用されます。例:
次の CSV 文字列について考えてみましょう:
<code>CSV_VALUES: 1.25, 3.87, 2, 5, 4, 3.3</code>
最初の値 (1.25) を取得するには:
<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 1, NULL, 1)</code>
2 番目の値 (3.87) の場合:
<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 2, NULL, 1)</code>
COLUMN_NUMBER
を反復処理することにより、すべての値が個別の列に抽出されます。 このメソッドは、文字列内のカンマ区切り値の数に関係なく、効率的にスケーリングします。
以上がOracle でカンマ区切り値を列に効率的に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。