Vous n'êtes pas identifié(e).
Bonjour,
Je pensais également avoir géré un problème de contrôle de validité d'une valeur numérique sous forme de chaine de caractères, je constate que cela n'est pas le cas.
J'avais écrit pour cela une fonction pour le réaliser. Force est de constater que le résultat attendu ne répond pas au besoin.
J'ai pu également consulter diverses variantes de telles fonctions, mais donnent toutes autant le même résultat incorrect ...
Existe t'il un moyen simple de réaliser cette fonctionnalité élémentaire ?
Ci-dessous, la fonction utilisée :
CREATE OR REPLACE FUNCTION IS_NUMERIC (P_VAR VARCHAR)
RETURNS BOOLEAN
AS $$
DECLARE
V_Num INTEGER;
BEGIN
V_Num := TO_NUMBER (P_VAR, '9999999999');
RETURN TRUE;
EXCEPTION
WHEN OTHERS THEN
RETURN FALSE;
END;
$$ LANGUAGE plpgsql;
D'avance merci d'éclairer ma lanterne.
Hors ligne
Sans plus d'information sur le problème, c'est difficile de vous répondre. En ce qui me concerne, je l'aurais écrit avec une regexp…
create function is_numeric (varchar) returns boolean language sql as $$
select $1~*'^[0-9]+(\.[0-9]+)?$';
$$;
marc=# select is_numeric('100a');
is_numeric
------------
f
(1 ligne)
marc=# select is_numeric('100.1');
is_numeric
------------
t
(1 ligne)
marc=# select is_numeric('100.12');
is_numeric
------------
t
(1 ligne)
marc=# select is_numeric('a100.12');
is_numeric
------------
f
(1 ligne)
Marc.
Hors ligne