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

Oracle Discussion :

insérer champ numérique sans décimales


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut insérer champ numérique sans décimales
    Salut,

    j'ai un nombre qui a le format suivant xx,yu
    et je voudrais l'enregistrer dans la base avec ce format xxxyu et aussi enregistrer un champ complémentaire indique le nombre de décimales à prendre en compte.
    Estc-e que c'est possible de le faire?

    Merci d'avance,

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    utilise REPLACE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select replace('12,32',',','') from dual;
     
    REPL
    ----
    1232
    Note qu'il suffit de multiplier par 100 sinon

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut
    Je te remercie pour ta réponse, ca marche.
    Par contre je ne peux pas multiplier par 100 car parfois, j'ai le cas de xx,y alors c'est variable,

    Je vous demande si on peut compter combien de chiffres on a avant le virgule, s'il y a deja une fonction?

    Merci

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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
    10g SOC10> select length( trunc(12.32) ) from dual;
     
    LENGTH(TRUNC(12.32))
    --------------------
                       2
     
    1 ligne sélectionnée.
     
    10g SOC10> c /12/1234
      1* select length( trunc(1234.32) ) from dual
    10g SOC10> r
      1* select length( trunc(1234.32) ) from dual
     
    LENGTH(TRUNC(1234.32))
    ----------------------
                         4
     
    1 ligne sélectionnée.
    ATTENTION : tu remarqueras que j'utilise comme séparateur décimal le point et non la virgule comme dans l'exemple de Fred_D.
    Cela dépend du paramétrage !

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut
    Merci pour vos aides mais je l'ai testé avec 0.56 et qd je fais replace il me donne 56 et moi je veux 056 avec le nombre 1 (indique le nombre avant le virgule) car dans ce cas la on sait qu'on a un 0 avant le virgule et si j'ai 56 dans ce cas la on comprend que j'ai 5 avant la virgule et cela n'est pas correcte.

    Merci

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Pourquoi n'utilisez-vous pas ma méthode sur la chaîne en question avant d'appliquer la fonction REPLACE ?

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut
    Merci pour vos aides mais je l'ai testé avec 0.56 et qd je fais replace il me donne 56 et moi je veux 056 avec le nombre 1 (indique le nombre avant le virgule) car dans ce cas la on sait qu'on a un 0 avant le virgule et si j'ai 56 dans ce cas la on comprend que j'ai 5 avant la virgule et cela n'est pas correcte.

    Merci

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Indique plutôt le nb de décimales.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH C AS (SELECT 0.56 AS A FROM dual)
    SELECT a, REPLACE(a, '.'), LENGTH(a) - INSTR(a, '.') 
    FROM c
    Donne
    0.56 56 2

    avec 122.35
    12.356 12356 3

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut
    Merci mais si tu as 12 alors il te donne 2 au lieu de 0 ... ou meme 12.00

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pardon, voici la version corrigée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WITH C AS (SELECT 12.00 AS A FROM dual)
    SELECT a, REPLACE(a, '.'), LENGTH(a) - DECODE(INSTR(a, '.'),0,LENGTH(a), INSTR(a, '.'))
    FROM c

Discussions similaires

  1. Formatage champ numérique 2 décimales
    Par pwout dans le forum IHM
    Réponses: 2
    Dernier message: 19/06/2015, 21h14
  2. Réponses: 4
    Dernier message: 04/03/2010, 11h04
  3. Point décimal (.) sur un champs numérique
    Par tleboukaka dans le forum Bases de données
    Réponses: 11
    Dernier message: 02/02/2010, 10h52
  4. Réponses: 5
    Dernier message: 09/02/2008, 14h04
  5. Champ numérique: décimales
    Par Zinemon dans le forum Modélisation
    Réponses: 9
    Dernier message: 12/06/2007, 12h23

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