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 :

Formatage de nombres [12c]


Sujet :

SQL Oracle

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut Formatage de nombres
    Bonjour,

    Je dois formater une colonne de montants monétaires de format NUMBER(12.3) en supprimant la virgule.

    Avec TRUNC et l'aide de la FAQ, j'ai trouvé partiellement ce dont j'ai besoin mais le problème est que les nombres sont enregistrés parfois sans décimale : 100 au lieu de 100.000. Du moins c'est comme ça qu'ils s'affichent dans Sql Developer.

    Du coup avec ma formule actuelle :
    - 100.123 devient bien 100123
    - 100.12 devient bien 100120
    - 100.1 devient bien 100100
    - mais 100 devient 1000 au lieu de 10000

    Ma formule de test actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_CHAR(TRUNC(100.123, 0)) || TO_CHAR((100.123 - TRUNC(100.123, 0)) * 1000) FROM DUAL;
    Remplacez 100.123 par 100 dans la formule si vous voulez tester.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 152
    Points : 1 939
    Points
    1 939
    Par défaut
    Bonjour,

    Tu veux dire 100000 ?

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select trunc(&nombre) || rpad(1000*mod(&nombre, 1), 3, '0') from dual;

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Ça fonctionne. Merci beaucoup.

    Je n'avais pas pensé à la fonction MOD pour la partie décimale... honte à moi !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Et pourquoi ne pas simplement multiplier par 1000 ?
    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
    with cte_data (num) as
    (
    select 100.123 from dual union all
    select 100.12  from dual union all
    select 100.1   from dual union all
    select 100     from dual
    )
    select num, num*1000
      from cte_data;
     
    NUM      NUM*1000
    -------  --------
    100.123    100123
    100.12     100120
    100.1      100100
    100        100000

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    C'est vrai que pour ce que j'ai demandé, c'est plus simple.

    Mais en réalité, je dois formater ces nombres en [signe moins ou blanc] || [complétion à gauche par des zéros jusqu'à une taille de 14 chiffres DONT 2 décimales sans le signe de décimale (le point ou la virgule selon la notation)].

    Du coup j'ai déjà noté dans ma requête et signalé aux personnes concernées qu'un montant de, par exemple, 123.456 deviendra ' 00000000012345' et non pas arrondi au centime supérieur en ' 00000000012346'. J'attends la réponse de savoir si c'est gênant ou pas.

    Oui, je sais, c'est un formatage bizarre mais c'est exprimé ainsi dans les exigences. De même que les chaînes de caractères doivent être soit tronquées à la nouvelle longueur désirée ou complétées avec des blancs à droite jusqu'à la taille de chaîne donnée.
    C'est pour une reprise de données dans le cadre d'un changement de système et ça me prend la tête depuis déjà pas mal de temps et je n'ai pas fini !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Toujours dans le même esprit :
    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
    with cte_data (num) as
    (
    select  100.126 from dual union all
    select  100.123 from dual union all
    select -100.126 from dual union all
    select -100.123 from dual union all
    select  100.12  from dual union all
    select  100.1   from dual union all
    select  100     from dual
    )
    select num
         , to_char(round(num, 2)*100, '00000000000000') avec_arrondi
         , to_char(trunc(num, 2)*100, '00000000000000') sans_arrondi
      from cte_data;
     
    NUM       AVEC_ARRONDI     SANS_ARRONDI
    --------  ---------------  ---------------
     100.126   00000000010013   00000000010012
     100.123   00000000010012   00000000010012
    -100.126  -00000000010013  -00000000010012
    -100.123  -00000000010012  -00000000010012
     100.12    00000000010012   00000000010012
     100.1     00000000010010   00000000010010
     100       00000000010000   00000000010000

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    OK merci beaucoup.

    J'attends la réponse des personnes concernées avant d'appliquer ça. J'ai d'autres requêtes à faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSL-FO] formatage de nombre
    Par qouify dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/05/2006, 13h58
  2. [PHP-JS] Formatage de nombre
    Par goldorax113 dans le forum Langage
    Réponses: 5
    Dernier message: 08/05/2006, 11h50
  3. formatage de nombre
    Par Phiz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 29/03/2006, 18h17
  4. Formatage de nombres dans une page JSP
    Par Addouna dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 10/03/2006, 13h01
  5. Formatage des nombres à l'affichage
    Par nbutin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 13/07/2004, 10h54

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