ホームページ > データベース > mysql チュートリアル > Oracle のカンマ区切り値を重複せずに複数の行に分割する方法

Oracle のカンマ区切り値を重複せずに複数の行に分割する方法

Patricia Arquette
リリース: 2024-12-30 12:32:10
オリジナル
542 人が閲覧しました

How to Split Comma-Separated Values in Oracle into Multiple Rows Without Duplicates?

Oracle テーブル内の複数のカンマ区切り値を重複せずに複数の行に分割する

Oracle テーブル内のデータを扱う場合、多くの場合、これが必要になります。カンマ区切りの値を複数の行に分割します。 CONNECT BY と正規表現を組み合わせて使用​​すると、これを実現できます。ただし、クエリ結果の重複行を避けることが重要です。

カンマ区切り値を分割するためのクエリ

WITH CTE AS (
  SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL
  UNION
  SELECT 'f,g' temp, 2 slno FROM DUAL
  UNION
  SELECT 'h' temp, 3 slno FROM DUAL
)

SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno
FROM CTE
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
AND PRIOR slno = slno
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
ログイン後にコピー

説明

このクエリは再帰的な WITH 句を使用して共通テーブル式を作成します(CTE) CTE という名前。 CTE は、カンマ区切りの値を含む 3 行のデータで構成されます。

その後、メインの SELECT ステートメントが temp 列から個々の値を抽出します。 TRIM 関数は、値の先頭または末尾の空白を削除するために使用されます。 REGEXP_SUBSTR() 関数は、カンマ区切り文字に基づいて一時列を個別の値に分割します。

CONNECT BY 句は再帰的分割を実行します。これにより、カンマ区切りの各値に一意のレベルが割り当てられるようになります。 PRIOR slno = slno 条件により、各行 (slno) 内でのみレベルが増加することが保証されます。

さらに、PRIOR DBMS_RANDOM.VALUE IS NOT NULL 条件は、重複行の生成を防ぐために使用されます。 DBMS_RANDOM.VALUE は、乱数を返す疑似列です。これを IS NOT NULL と比較することで、重複を排除するランダムな要素を導入します。

最終結果は、複数の行を含むテーブルになり、各行には元のカンマ区切り文字列からの 1 つの値が含まれます。このアプローチでは、重複行を生成せずに値を効果的に分割します。

以上がOracle のカンマ区切り値を重複せずに複数の行に分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート