Maison >base de données >tutoriel mysql >Comment extraire la nième valeur d'une chaîne séparée par des virgules, en gérant les valeurs nulles ?

Comment extraire la nième valeur d'une chaîne séparée par des virgules, en gérant les valeurs nulles ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-01 05:31:09971parcourir

How to Extract the nth Value from a Comma-Separated String, Handling Nulls?

Extraction d'une nième valeur d'une liste séparée par des virgules avec gestion des valeurs nulles

Lors de l'utilisation de REGEXP_SUBSTR() pour extraire la nième valeur d'une virgule- liste séparée, la gestion des valeurs nulles peut être difficile. Pour y parvenir, une modification de l'expression régulière est nécessaire.

L'expression originale, REGEXP_SUBSTR('1,,3,4,5', '[^,] ', 1, 2), renvoie le deuxième occurrence d'un ou plusieurs caractères autres que des virgules. Cependant, lorsqu'il rencontre une valeur nulle, il l'interprète comme le début d'une nouvelle valeur non vide et renvoie le troisième élément au lieu de la valeur nulle attendue.

Pour résoudre ce problème, l'expression est modifiée pour autoriser zéro ou plus de caractères autres que des virgules : REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1). Il identifie la valeur souhaitée en recherchant zéro ou plusieurs caractères suivis d'une virgule ou de la fin de la ligne, et renvoie uniquement le premier sous-groupe (les données souhaitées).

Cette expression améliorée gère correctement les valeurs nulles, renvoyant null si le deuxième élément est vide. La fonction GET_LIST_ELEMENT() encapsule cette logique pour une réutilisation plus facile :

  FUNCTION  GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
    BEGIN
      RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
  END GET_LIST_ELEMENT;

Cette approche prend en charge les valeurs nulles et permet la sélection de n'importe quelle valeur dans la liste.

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