Sélection d'une nième valeur dans une liste avec REGEX et gestion des valeurs nulles
L'extraction du nième élément d'une liste séparée par des virgules peut être réalisée à l'aide de REGEXP_SUBSTR (), mais il peut échouer lorsqu'il rencontre des valeurs nulles. Pour résoudre ce problème, envisagez la solution suivante :
L'expression régulière utilisée est (.*?)(,|$), qui capture tout avant la nième occurrence d'une virgule ou la fin de la ligne. Le .*? le modèle non gourmand correspond au nombre minimum de caractères nécessaire pour atteindre la virgule. Le nième sous-groupe représente la valeur recherchée.
SELECT REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) AS data FROM dual; -- Output: NULL
Cette approche garantit que les valeurs nulles sont renvoyées comme nulles, quelle que soit leur position dans la liste.
Pour améliorer la réutilisabilité, envisagez d'encapsuler le logique regex dans une fonction :
FUNCTION GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 AS BEGIN RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1); END GET_LIST_ELEMENT;
L'utilisation de cette fonction simplifie l'extraction processus :
SELECT GET_LIST_ELEMENT('123,222,,432,555', 4) AS value FROM dual; -- Output: 432
Cette approche gère efficacement les valeurs nulles et fournit une solution polyvalente pour extraire des données à partir de listes séparées par des virgules.
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!