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 :

Problème avec decode et date du jour


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut Problème avec decode et date du jour
    bonjour à tous,
    j'ai un champ langage et un champ jour que j'aimerais alimenter automatiquement. tel qu' on a 3 langues: francais=1,espagnol=2 et anglais=3 et il faudrait que :

    decode((ID_LANGUAGE),1,to_char(SYSDATE,'DAY') 'Lundi',2,to_char(SYSDATE,'DAY') 'Lunes',3,to_char(SYSDATE,'DAY') 'Monday')...
    et il faudrait que ca alimente pour tous les jours de la semaine.
    peut-on faire un decode d'un decode??

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    Je ne vais pas répondre sur le decode (désolée ), mais plutôt sur ce que je ferai à votre place.

    J'utiliserai plutôt un CASE WHEN (http://docs.oracle.com/cd/E11882_01/...htm#SQLRF20037)

    Cordialement,

    Arkhena

  3. #3
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Salut,

    Je n'ai pas totalement compris ce que tu veux faire mais oui il est possible d'imbriquer plusieurs DECODE l'un dans l'autre.

    Pour le jour de la semaine je te conseil de te baser plutôt sur le numéro du jour dans la semaine que le nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select TO_CHAR(SYSDATE,'D') from dual
    Qui retourne 1 pour lundi , 2 pour mardi .... 7 pour dimanche

    Ensuite selon ce que tu veux faire, l'utilisation de la clause CASE pourrait faciliter la lisibilité de ta requête. A toi de mieux décrire le résultat voulu je pense

  4. #4
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Si tu cherches à alimenter la date du jour tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CASE TO_CHAR(SYSDATE,'D')
        WHEN 1 THEN DECODE(ID_LANGUAGE,1,'LUNDI',2,'LUNES',3,'MONDAY','')
        WHEN 2 THEN DECODE(ID_LANGUAGE,1,'MARDI',2,'MARTES',3,'TUESDAY','')
        WHEN 3 ....
        ...
        WHEN 7 THEN DECODE(ID_LANGUAGE,1,'DIMANCHE',2,'DOMINGO',3,'SUNDAY','')
        ELSE ''
    END

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Pour info, tu peux aussi utiliser le nls_date_language
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
              INITCAP(TO_CHAR(SYSDATE,'DAY', 'NLS_DATE_LANGUAGE=French')) FR,
              INITCAP(TO_CHAR(SYSDATE,'DAY', 'NLS_DATE_LANGUAGE=Spanish')) ES,
              INITCAP(TO_CHAR(SYSDATE,'DAY', 'NLS_DATE_LANGUAGE=English')) EN
    FROM dual
     
    FR	ES		EN
    Lundi   Lunes    	Monday

  6. #6
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut oracle
    Merci à tous
    je tiens à préciser que je suis sur oracle...
    case when marche très bien mais il ne tourne pas sur Génio après et j'en ai besoin dans cet ETL.
    Le decode serait l'idéal...

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    peux tu donner la description de ta table et le résultat attendu.. parce que je vois mal l'histoire d'alimenter toute la semaine alors que tu utilises un sysdate

  8. #8
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut résolu
    c'est bon! ca été résolu par Bibileuh. voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECODE(TO_CHAR(sysdate,'D'),
    1,DECODE(ID_LANGUAGE,1,'Lundi',2,'Lunes',3,'Monday'),
    2,DECODE(ID_LANGUAGE,1,'Mardi',2,'Martes',3,'Tuesday'),
    3,DECODE(ID_LANGUAGE,1,'Mercredi',2,'Miércoles',3,'Wednesday'),
    4,DECODE(ID_LANGUAGE,1,'Jeudi',2,'Jueves',3,'Thurday'),
    5,DECODE(ID_LANGUAGE,1,'Vendredi',2,'Viernes',3,'Friday'),
    6,DECODE(ID_LANGUAGE,1,'Samedi',2,'Sábado',3,'Saturday'),
    7,DECODE(ID_LANGUAGE,1,'Dimanche',2,'Domingo',3,'Sunday'))

  9. #9
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Le problème du 'D' est que la semaine commence dimanche.. donc pour aujourd'hui oracle donne Mardi avec ta requête.

    Et puis il y a plus simple avec le nls_date_language

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT nom,
    	DECODE(TO_CHAR(SYSDATE,'D'),1,DECODE(ID_LANGUAGE,1,'Lundi',2,'Lunes',3,'Monday'),
    2,DECODE(ID_LANGUAGE,1,'Mardi',2,'Martes',3,'Tuesday'),
    3,DECODE(ID_LANGUAGE,1,'Mercredi',2,'Miércoles',3,'Wednesday'),
    4,DECODE(ID_LANGUAGE,1,'Jeudi',2,'Jueves',3,'Thurday'),
    5,DECODE(ID_LANGUAGE,1,'Vendredi',2,'Viernes',3,'Friday'),
    6,DECODE(ID_LANGUAGE,1,'Samedi',2,'Sábado',3,'Saturday'),
    7,DECODE(ID_LANGUAGE,1,'Dimanche',2,'Domingo',3,'Sunday')) jour,
    INITCAP(TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE=' ||DECODE(ID_LANGUAGE,1,'French', 2,'Spanish', 3,'English'))) AS jour_2
    FROM (SELECT 1 id_language, 'FR' nom FROM dual
    	UNION ALL SELECT 2 id_language, 'ES' nom FROM dual
    	UNION ALL SELECT 3 id_language, 'EN' nom FROM dual
      )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NOM	JOUR	JOUR_2
    FR	Mardi	Lundi   
    ES	Martes	Lunes    
    EN	Tuesday	Monday

  10. #10
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Citation Envoyé par McM Voir le message
    Le problème du 'D' est que la semaine commence dimanche.. donc pour aujourd'hui oracle donne Mardi avec ta requête.
    Chez moi la semaine commence bien lundi et en testant ta requête j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    NOM	JOUR    JOUR_2
    FR	Lundi   Lundi   
    ES	Lunes 	Lunes    
    EN	Monday	Monday
    Comment ça se fait ?

  11. #11
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Ca dépend du nls_territory du client http://www.adp-gmbh.ch/ora/sql/to_char.html

  12. #12
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut
    ca marche très bien! il n' ya pas de décalage de jour...

  13. #13
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    C'est juste que si le code est utilisé sur une autre machine le résultat peut être faux. Après, c'est vous qui voyez

  14. #14
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par McM Voir le message
    INITCAP(TO_CHAR(SYSDATE, 'DAY'))
    ou plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_CHAR(SYSDATE, 'Day')

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

Discussions similaires

  1. Problème avec SimpleDateFormat.parse(Date)
    Par nad dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 13h34
  2. problème avec la fonction date()
    Par puppusse79 dans le forum Access
    Réponses: 4
    Dernier message: 24/03/2006, 15h59
  3. [FLASH MX] Problème avec l'objet Date
    Par n_tony dans le forum Flash
    Réponses: 13
    Dernier message: 22/03/2005, 13h44
  4. Problème avec les paramètres date BDE/ODBC Oracle/XP Pro
    Par Bloon dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/10/2004, 10h09
  5. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33

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