Conversion caractère -> nombre, erreur

Conversion caractère -> nombre, erreur - SQL/NoSQL - Programmation

Marsh Posté le 30-12-2009 à 09:32:03    

Bonjour à tous, je dois comparer des personnes selon leurs matricules sur deux bases différentes.
Le champ CODE est de type NUMBER, le champ NUM est de type VARCHAR2(17).
Pour pouvoir faire la comparaison il faut que les deux soient du même type donc j'utilise la fonction to_number mais ça ne fonctionne pas :(

Code :
  1. SELECT  b1.NOM, b1.PRENOM, b1.CODE, b2.NAME, b2.FSTNAME, To_Number(b2.NUM)
  2. FROM    base1 civi, base2@linkbase2 b2
  3. WHERE   b1.CODE = To_Number(b2.NUM)


Code :
  1. ORA-01722: Nombre non valide
  2. ORA-02063: précédant line de linkbase2
  3. Total execution time 0.015 sec.


Base trop vieille ? Je suis en Oracle v8 je crois.
Merci de votre aide.

Reply

Marsh Posté le 30-12-2009 à 09:32:03   

Reply

Marsh Posté le 30-12-2009 à 09:40:40    

soit tu as des matricules qui ne sont pas des nombres, soit tu dois lui préciser le format, to_number peut prendre un 2ème paramètre qui est un masque.
 
et si tu ne veux pas te casser la nenette tu fais plutot un to_char de ton b1.CODE

Reply

Marsh Posté le 30-12-2009 à 09:42:22    

C'est ce que j'ai fait merci :)

Reply

Marsh Posté le 16-02-2010 à 10:46:12    

Salut,
 
J'ai un problème assez similaire à celui de marty59. J'ai un champs VALUE qui est un varchar2 qui contient des nombres du genre (-1, 0 , 3.5...).
J'ai besoin de vérifier que ces nombres sont supètieur a 0.
 
Ce que j'ai fais c'est :

Code :
  1. AND TO_NUMBER(VALUE, '9999D99') > TO_NUMBER('0', '9999D99')


mais sa ne marche pas ("Nombre Invalide" ).
 
Voilà j'espère que qq pourra m'aider.

Reply

Marsh Posté le 22-02-2010 à 12:04:17    

En fait pour être parfaitement précis, TO_NUMBER comporte non pas 2, mais 3 paramètre, le dernier (NLS_NUMERIRC_CHARACTERS) étant la variable locale pour les décimales de plus tu indiques des valeurs pouvant être négatives, il faut donc lui préciser qu'il est possible de trouver ce signe (S), le problème c'est que lorsque l'on précise le signe (S) il faut qu'il soit TOUJOURS présent (y compris pour les nombre positif).

 

Donc en gros pour ton cas ça donnerait :
TO_NUMBER(DECODE(SUBSTR(VALUE, 0, 1), '-', VALUE,  '+', VALUE, '+'||VALUE), 'S99999D99','NLS_NUMERIC_CHARACTERS = '',.''') >  0


Message édité par E-Nyar le 22-02-2010 à 12:05:46

---------------
Don't fuck me, I'm anonymous.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed