Oracle : diviser les valeurs séparées par des virgules en plusieurs colonnes
Cet article aborde le défi de diviser efficacement les valeurs séparées par des virgules (CSV) dans Oracle SQL, en particulier lorsqu'il s'agit d'éléments nuls ou vides dans la chaîne CSV. Les approches standard utilisant REGEXP_SUBSTR
peuvent échouer dans ces cas.
Une solution robuste utilise un modèle d'expression régulière raffiné : (.*?)(,|$)
. Ce modèle gère efficacement les valeurs nulles et les entrées vides. Décomposons le modèle :
(.*?)
: Cette partie capture n'importe quel personnage (.
) zéro ou plusieurs fois (*
), de manière non gourmande (?
). Cela garantit que seuls les caractères jusqu'à la virgule suivante (ou la fin de la chaîne) sont capturés.(,|$)
: Cela correspond soit à une virgule (,
), soit à la fin de la chaîne ($
). Cela fait office de délimiteur, séparant chaque valeur.Ce modèle amélioré garantit une extraction précise des valeurs, même avec des valeurs nulles ou des entrées vides dans la chaîne CSV. Par exemple, pour extraire la cinquième valeur de la chaîne « 1,2,3,,5,6 », utilisez cette requête :
<code class="language-sql">REGEXP_SUBSTR('1,2,3,,5,6', '(.*?)(,|$)', 1, 5, NULL, 1)</code>
Cette approche évite l'erreur courante consistant à récupérer des valeurs incorrectes lorsque des valeurs nulles sont présentes, fournissant ainsi une méthode fiable pour analyser les données CSV dans Oracle.
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!