Vous n'êtes pas identifié(e).

#1 05/12/2017 09:53:49

Mlan2
Membre

Fonction de contrôle de valeur numérique

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

#2 05/12/2017 10:31:36

Marc Cousin
Membre

Re : Fonction de contrôle de valeur numérique

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

Pied de page des forums