Maison >base de données >tutoriel mysql >Comment diviser des chaînes délimitées par des virgules en plusieurs lignes dans Oracle ?

Comment diviser des chaînes délimitées par des virgules en plusieurs lignes dans Oracle ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-22 17:36:15554parcourir

How to Split Comma-Delimited Strings into Multiple Rows in Oracle?

Diviser la chaîne en plusieurs lignes dans la base de données Oracle

Présentation

Diviser une chaîne séparée par des virgules en plusieurs lignes est une tâche courante dans le traitement des données. Dans Oracle 10g et 11g, il existe plusieurs façons d'atteindre efficacement cet objectif.

Répartition de plusieurs colonnes

Pour diviser une chaîne contenant plusieurs valeurs en plusieurs colonnes, vous pouvez utiliser une combinaison de REGEXP_REPLACE, REGEXP_SUBSTR et de requêtes hiérarchiques.

Requête :

<code class="language-sql">WITH temp AS (
    SELECT name, project, error FROM your_table
)
SELECT
    name,
    project,
    TRIM(REGEXP_SUBSTR(error, '[^,]+', 1, levels.column_value)) AS new_error
FROM
    temp,
    TABLE(CAST(
        MULTISET(
            SELECT level FROM dual CONNECT BY level <= REGEXP_COUNT(error, ',') + 1
        ) AS sys.odcinumberlist
    )) levels
WHERE levels.column_value <= REGEXP_COUNT(error, ',') + 1;</code>

Instructions :

  1. La fonction REGEXP_SUBSTR extrait le nombre spécifié d'occurrences du modèle spécifié à partir d'une chaîne. La valeur_colonne dans la requête hiérarchique détermine la nième occurrence.
  2. La fonction REGEXP_REPLACE supprime les caractères non délimiteurs pour compter le nombre total d'erreurs. (Cette étape est implicite dans REGEXP_COUNT dans la requête optimisée)
  3. Les fonctions multiset et TABLE créent un ensemble croissant de valeurs pour les requêtes hiérarchiques.
  4. La jointure croisée avec la table temporaire se répète pour chaque ligne pour chaque occurrence d'erreur.

Conclusion

Cette méthode améliorée offre un moyen flexible de diviser des chaînes multi-colonnes en plusieurs lignes dans Oracle 10g et 11g. Il utilise les fonctions intégrées d'Oracle et des techniques avancées telles que les requêtes hiérarchiques pour gérer efficacement les tâches complexes de manipulation de chaînes.

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