Maison >base de données >tutoriel mysql >Comment extraire de manière fiable des valeurs spécifiques de listes séparées par des virgules contenant des valeurs NULL à l'aide de REGEXP_SUBSTR() ?

Comment extraire de manière fiable des valeurs spécifiques de listes séparées par des virgules contenant des valeurs NULL à l'aide de REGEXP_SUBSTR() ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-29 00:44:13363parcourir

How to Reliably Extract Specific Values from Comma-Separated Lists Containing NULLs Using REGEXP_SUBSTR()?

EXPRESSION RÉGULIÈRE POUR SÉLECTIONNER DES VALEURS INDIVIDUELLES DANS UNE LISTE AVEC DES NULLS

Problème :

REGEXP_SUBSTR () ne parvient pas à récupérer la nième valeur souhaitée à partir d'un liste séparée par des virgules lorsque des valeurs nulles sont présentes. Lorsqu'une valeur est nulle, elle renvoie la valeur non nulle suivante comme nième occurrence.

Solution :

Pour surmonter ce problème, une expression REGEXP_SUBSTR() modifiée peut être employé :

REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1)

Cette expression capture les données souhaitées en suivant ces étapes :

  1. (.*?) : correspond à zéro ou plusieurs caractères facultatifs.
  2. (,|$) : correspond à une virgule ou à la fin de la ligne.
  3. 1 : Spécifie que le premier groupe (sous-groupe) correspondant correspond aux données souhaitées.
  4. 2 : Définit l'occurrence pour sélectionner le nième souhaité value.
  5. NULL : renvoie null si aucune correspondance n'est trouvée pour l'occurrence spécifiée.

Fonction réutilisable :

Pour plus simple et plus utilisation pratique, cette expression REGEXP_SUBSTR() modifiée peut être encapsulée dans un PL/SQL function :

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;

Exemple d'utilisation :

Pour récupérer le 4ème élément de la liste '123,222,,432,555' :

select get_list_element('123,222,,432,555', 4) from dual;

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