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 à 15h32.
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