IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Conversion VARCHAR to NUMBER


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut Conversion VARCHAR to NUMBER
    Bonjour à tous,

    J'ai un champ "perm" de type varchar2 (255) que je voudrais le transformer dans une requete SQL pour que ma jointure marche


    select ....... where perm = id

    Sachant que id est de type Number(18,0)

    J'ai essayé avec cast et convert mais j'ai toujours le même message d'erreur : invalid number

    Je travaille sur Oracle SQL Developer

    Vous avez une idée ?

    Je vous en remercie

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Si vous avez le message invalid number, c'est que.. ben... le varchar que vous voulez convertir en nombre n'est pas valide ?

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select to_number('1') from dual;
     
    TO_NUMBER('1')
    --------------
                 1
    1 row selected.
     
    select to_number('A') from dual;
                     *
    Error at line 1
    ORA-01722: Nombre non valide
    Ici on a pu convertir '1', mais pas 'A'.
    Regardez vos données.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut
    en fait le champ "perm" contient des numéro sous format char et des chaine de caractère. Cela pose un problème ?

  4. #4
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    La fonction qui convertit un VARCHAR en NUMBER est TO_NUMBER.
    Mais effectivement, le fait d'avoir dans le champ "perm" des nombres et des chaines de caractères pose problème, car TO_NUMBER d'une chaine de caractères ne fonctionne pas, comme le montre l'exemple de Waldar.

    Si vous ne faites pas de conversion (comme dans votre code de départ), Oracle ne sait pas comparer 2 champs de types différents (un VARCHAR avec un NUMBER). Il fait donc une conversion implicite, et choisit le type le plus simple à manipuler pour lui : le NUMBER. Il ajoute donc un TO_NUMBER à votre requête avant de l'exécuter.

    Pour que cela fonctionne, la solution la plus simple est de comparer des VARCHAR des 2 cotés, et donc convertir le champ "id" avec un TO_CHAR.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Points : 591
    Points
    591
    Par défaut
    Ou alors faire un substring de perm avec un to_number.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select ... where to_number(substr(perm,0,10)) = id
    Cela ne marche que dans le cas ou la chaine est du type '1234567890ABCDEF' et ca ne pourra jamais marcher si la chaine ressemble à '12AD32GT45' et que le numéro à extraire est toujours de même longueur (sur 10 position par exemple)...

    Toujours est il que le mieux est que perm ou un autre champ dans cette table sois un numérique. Ca eviterai ce genre de problème.
    Oracle DBA OCM 11g, 12c
    OCP 11g, 12c
    OCE RAC, SQL

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    vous pouvez essayer quelque chose de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    With DONNEES as (Select '123456' PERM From DUAL Union All
    Select 'abcdef' PERM From DUAL Union All
    Select '123def' PERM From DUAL Union All
    Select 'abc456' PERM From DUAL),
    IDENTIFIANT as (Select 123456 ID From DUAL Union All
    Select 123 ID From DUAL Union All
    Select 456 ID From DUAL Union All
    Select 987 ID From DUAL)
    Select * From DONNEES D Join IDENTIFIANT I On Trim(D.PERM) = Trim(TO_CHAR(I.ID))

Discussions similaires

  1. Conversion de varchar en number
    Par nathieb dans le forum PL/SQL
    Réponses: 7
    Dernier message: 24/10/2008, 11h03
  2. Conversion varchar en number
    Par nabelou1 dans le forum SQL
    Réponses: 12
    Dernier message: 15/05/2008, 17h59
  3. Conversion varchar en date
    Par kaboume dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/08/2006, 16h29
  4. [T-SQL] Conversion varChar en timeStamp
    Par Thig dans le forum Adaptive Server Enterprise
    Réponses: 6
    Dernier message: 27/10/2005, 12h11
  5. Conversion VARCHAR vers INT
    Par Slash dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/05/2005, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo