Maison >base de données >tutoriel mysql >Comment diviser de manière fiable des valeurs délimitées par des virgules en colonnes de table Oracle ?

Comment diviser de manière fiable des valeurs délimitées par des virgules en colonnes de table Oracle ?

DDD
DDDoriginal
2025-01-22 09:22:08558parcourir

How to Reliably Split Comma-Delimited Values into Oracle Table Columns?

Analyser efficacement les valeurs séparées par des virgules dans les tables Oracle

La gestion de grands ensembles de données avec des valeurs séparées par des virgules (CSV) nécessite souvent de diviser ces valeurs en colonnes individuelles au sein d'une table Oracle pour une analyse et une manipulation rationalisées des données. Bien que les expressions régulières offrent une solution via la fonction REGEXP_SUBSTR, une approche courante utilisant l'expression [^,] peut s'avérer peu fiable.

Cela est particulièrement vrai lorsqu'il s'agit de données CSV contenant des valeurs nulles ou vides. Pour garantir une extraction précise des éléments, indépendamment des valeurs nulles ou des chaînes vides, une expression régulière plus robuste est nécessaire. L'expression suivante est recommandée :

<code class="language-sql">(.*?)(,|$)</code>

Cette expression utilise des groupes de capture pour identifier précisément l'élément souhaité, y compris les virgules de début ou de fin. En spécifiant l'index du groupe de capture (1) dans REGEXP_SUBSTR, vous pouvez récupérer de manière fiable la valeur de l'élément, en gérant correctement les valeurs renseignées et nulles.

Considérez cette requête illustrative :

<code class="language-sql">SELECT
  ROW_NUM,
  REGEXP_SUBSTR(VAL, '(.*?)(,|$)', 1, 1, NULL, 1) AS VAL1,
  REGEXP_SUBSTR(VAL, '(.*?)(,|$)', 1, 2, NULL, 1) AS VAL2
FROM (
  SELECT
    ROWNUM AS ROW_NUM,
    '1.25, 3.87, 2' AS VAL
  FROM dual
  UNION ALL
  SELECT
    ROWNUM,
    '5, 4, 3.3'
  FROM dual
)</code>

Cette requête démontre la division des valeurs séparées par des virgules de la colonne « VAL » en deux nouvelles colonnes, « VAL1 » et « VAL2 », tout en conservant l'intégrité des données même avec des entrées nulles ou vides. La sortie montre clairement les valeurs séparées. Notez l'utilisation de ROWNUM et UNION ALL pour créer des exemples de données, une approche plus standard que l'exemple d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn