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
Libérer: 2024-12-29 00:44:13
original
398 Les gens l'ont consulté

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)
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal