Je cherche à tester si un champ, de type caractères, est un nombre ou pas : : . C'est pour une requête SQL en oracle
Merci de m'aider !
Je cherche à tester si un champ, de type caractères, est un nombre ou pas : : . C'est pour une requête SQL en oracle
Merci de m'aider !
Essaie de la transtyper dans une bloc try..except
Roland
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 var x : Float; begin ... try x := StrToFloat (MonChamp); ShowMessage ('Nombre'); except ShowMessage ('Pas nombre') end;
Roland
Je me croyais dans le forum Delphi. Ma réponse est donc sans doute à côté
Roland
Roland
Tiens... mais que fait cette question dans SQL au lieu d'Oracle ?Envoyé par the kikouyou
Effectivement, c'est loin d'être du SQL. Merci pour l'effort.Envoyé par rsc
Parce que c'est une question de SQL ... même si je précise que je travaille sous Oracle...Envoyé par orafrance
Sinon voila une méthode :
Pour l'utiliser par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 create or replace function is_number(p_check VARCHAR2) return BOOLEAN is dummy number; begin dummy := to_number(p_check); RETURN TRUE; exception when others then if SQLCODE = -6502 THEN return FALSE; else RETURN TRUE; end if; end; /
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 SQL> ; 1 begin 2 if is_number('&val') then 3 dbms_output.put_line('OK'); 4 else 5 dbms_output.put_line('KO'); 6 end if; 7* end; SQL> / Entrez une valeur pour val : 2 ancien 2 : if is_number('&val') then nouveau 2 : if is_number('2') then OK Procédure PL/SQL terminée avec succès. SQL> / Entrez une valeur pour val : toto ancien 2 : if is_number('&val') then nouveau 2 : if is_number('toto') then KO Procédure PL/SQL terminée avec succès. SQL>
non c'est une question spécifique au SGBDEnvoyé par the kikouyou
A ma connaissance il n'existe aucune fonction SQL standard pour çà.Envoyé par the kikouyou
Les solutions seront certainement différentes en fonction du SGBDR. Le forum Oracle semble donc être plus adapté
7 fois à terre, 8 fois debout
Pour ceux que cela intéresse j'ai trouvé cela
retourne 0 si c'est un nombre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part length(translate(trim(column_name),' +-.0123456789',' '))
ATTENTION
il manque ',' pour le séparateur de milliers ou pour les décimales
Code : Sélectionner tout - Visualiser dans une fenêtre à part length(translate(trim(column_name),' +-.,0123456789',' '))
Une autre variante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part instr(translate(NOM_SRV, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'),'X')
cette dernière proposition ne fonctionne pas puisqu'elle ne tient pas compte des symboles : *@ç etc...
Le test sur l'erreur Oracle tel que je te l'ai proposé me semble la plus infaillible
Et dix ans après, personne n'a vraiment songé à corriger la faute, que je corrige à présent :
Le translate va transformer la regexp en espaces, ce que le trim() va dégager, ce que le length() va compter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part length(trim(translate(column_name,' ,+-.0123456789',' ')))
Si 0, c'est un format de nombre. CQFD
Testé et approuvé sinon ! A mettre dans une FAQ
Dernière modification par ced ; 20/07/2014 à 16h32.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager