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 :

[oracle 9i] to_char sur un number


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut [oracle 9i] to_char sur un number
    Bonjour, et bon 1 avril à tous.

    Je souhaite formater un number(3) dans un varchar(3) en ajoutant des 0 devant.
    exemple : 1 devient '001'
    j'ai donc fait le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select '#'||to_char(1,'000')||'#' from dual;
     
    '#'||TO_CHAR(1,'000')||'#'
    ---------------------------------------------------
    # 001#
     
    SQL>
    : Ce que je comprends pas c'est la présence de l'espace entre le 1er # et 001 ?

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    C'est la place réservée au signe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select '#' || to_char (-1, '000') || '#' from dual;
    '#'||T
    ------
    #-001#

  3. #3
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    To_Char() appliqué à un numérique laisse toujours un espace devant pour le signe.

    Faites : Ltrim( To_char (...) )

  4. #4
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Ben c'est tout simple et tout logique ca, merci bien

    il y a aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select '#' || to_char (1, 'FM000') || '#' from dual;
    Merci à metalink aussi :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    fact: Oracle Server - Enterprise Edition
    symptom: TO_CHAR function shows an extra ' '
    symptom: Number contains leading space
    symptom: CHR(20) is displayed front of a number
    cause: The leading space is there to align negative numbers.
     
    Check the following example:
     
    SQL> SELECT '|'||'12345||'|' FROM DUAL;
     
    '|'||'12345'||'|'
    ------------------------------------------
    |12345|
     
    SQL> SELECT '|'||TO_CHAR(12345,99999)||'|' FROM DUAL;
     
    '|'||TO_
    --------
    | 12345|
     
    For more information check out <bug:742633>
     
     
     
    fix:
     
    Use the LTRIM function or the 'FM' format element to remove the leading space.
     
    SQL> SELECT '|'||ltrim(to_char(12345,99999))||'|' FROM DUAL;
     
    '|'||LTR
    --------
    |12345|
     
    SQL> SELECT '|'||to_char(12345,'FM99999')||'|' FROM DUAL;
     
    '|'||TO_
    --------
    |12345|
     
    References:
    Oracle 8i SQL Reference

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Il faut utiliser fm, ca évite l'appel au trim :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> select '#'||to_char(1,'fm000')||'#' from dual;
     
    '#'||T
    ------
    #001#

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  6. #6
    Invité de passage
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1
    Par défaut
    Citation Envoyé par lalystar Voir le message
    Il faut utiliser fm, ca évite l'appel au trim :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> select '#'||to_char(1,'fm000')||'#' from dual;
     
    '#'||T
    ------
    #001#

    Laly.
    Ce qui me dérange dans le résultat de Laly, c'est qu'il n'y a plus l'espace avant le 001, mais il y a un espace après le deuxième #...

    Je ne m'en étais jamais rendu compte, utilisant régulièrement le fameux FM, mais là ça m'embête... Une idée du pourquoi du comment ??

    Merci d'avance !

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Non il n'y a pas d'espace, c'est juste que le titre est plus large que la donnée.

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

Discussions similaires

  1. requête Oracle sur type NUMBER
    Par Cram_N7 dans le forum JDBC
    Réponses: 2
    Dernier message: 11/05/2009, 08h48
  2. [ORACLE 9i] Droit sur Truncate
    Par Etienne maheu dans le forum SQL
    Réponses: 5
    Dernier message: 14/06/2005, 11h05
  3. Réponses: 3
    Dernier message: 17/05/2004, 17h28
  4. Oracle 9.2 sur AIX 4.3.3
    Par ducho dans le forum Oracle
    Réponses: 3
    Dernier message: 25/03/2004, 16h59

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