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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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