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 :

DECODE qui ne décode pas ?


Sujet :

Oracle

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Par défaut DECODE qui ne décode pas ?
    Bonjour,

    J'ai un petit soucis, et je ne comprend pas pourquoi mon DECODE ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_CHAR(:SDATE,'DAY') DAY, DECODE( TO_CHAR(:SDATE,'DAY'),'MARDI',1,0) RSLT FROM DUAL
    :SDATE est au format Date, et je lui donne la valeur "12/01/2010"
    La requete me retourne :
    DAY RSLT
    MARDI 0

    Alors que mon décode devrait me retourner RSLT = 1......

    J'aimerai comprendre pourquoi mon DECODE ne fait pas son travail....
    Merci de votre aide

  2. #2
    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
    Utilisez le format FMDAY dans votre to_char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT TO_CHAR(SDATE,'DAY') as dy,
           REPLACE(TO_CHAR(SDATE,'DAY'), ' ', '$') as dy$,
           DECODE( TO_CHAR(SDATE,'DAY')  ,'MARDI',1,0) as rslt1,
           DECODE( TO_CHAR(SDATE,'FMDAY'),'MARDI',1,0) as rslt2
    from (select date '2010-01-12' as sdate FROM DUAL);
     
    DY		DY$		RSLT1	RSLT2
    MARDI   	MARDI$$$	0	1

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Par défaut
    Merci Waldar.

    Personnellement j'ai trouvé la solution en utilisant TRIM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_CHAR(:SDATE,'DAY') DAY, DECODE( TRIM(TO_CHAR(:SDATE,'DAY')),'MARDI',1,0) RSLT FROM DUAL
    Voilà, ça marche aussi.
    Par contre, je ne sais pas pourquoi Oracle ajoute des espaces.....

  4. #4
    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
    Tout est dans la documentation :
    http://download.oracle.com/docs/cd/B...004.htm#i34924

    Many datetime format elements are blank padded to a specific length.
    Please refer to the format model modifier FM for more information.

  5. #5
    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
    J'ajouterai aussi qu'une fonction s'exécute plus rapidement que deux :
    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
    declare
        v_day varchar2(10);
    begin
        dbms_output.put_line('Début avec TRIM : ' || to_char(sysdate, 'hh24:mi:ss'));
        for i in 1..1e8
        loop
          v_day := trim(to_char(sysdate, 'Day'));
        end loop;
        dbms_output.put_line('Fin   avec TRIM : ' || to_char(sysdate, 'hh24:mi:ss'));
     
        dbms_output.put_line('Début sans TRIM : ' || to_char(sysdate, 'hh24:mi:ss'));
        for i in 1..1e8
        loop
          v_day := to_char(sysdate, 'FMDay');
        end loop;
        dbms_output.put_line('Fin   sans TRIM : ' || to_char(sysdate, 'hh24:mi:ss'));
    end;
    /
     
    Début avec TRIM : 15:10:02
    Fin   avec TRIM : 15:13:23
     
    Début sans TRIM : 15:13:23
    Fin   sans TRIM : 15:16:21

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Par défaut
    Merci Waldar, mais la différence d'execution est minime, dans mon cas, ça ne change rien.

  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
    Je ne vois pas le mal à utiliser les bons outils et en même temps gagner 20% !
    Evidement dans la chaîne globale c'est anecdotique, mais si un jour quelqu'un relit votre code, il ne pourra rien dire.

    Enfin vouloir bien faire c'est une démarche personnelle, vous faites comme vous voulez.

  8. #8
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Par défaut
    Yep Waldar, t'as pas tord.
    Jvais utiliser le format FMDAY, plus rapide et plus lisible en plus.
    Merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  2. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 13h09
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 17h48
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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