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 :

PB SYSDATE, par ex : affiche 04h00 au lieu 16h00


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Points : 61
    Points
    61
    Par défaut PB SYSDATE, par ex : affiche 04h00 au lieu 16h00
    Bonjour,

    update utilisateurs set date_derniere_connexion=SYSDATE WHERE ID_UTILISATEUR=10
    La requete ci-dessus permet de mettre à jour la date de derniere connexion de l'utilisateur.
    Le seul pb est que lorsque la date se met à jour l'apres midi, par exemple 16h00, il m'affiche dans la base de donnees 04h00. Y a t-il un moyen de resoudre ce problème?

    Je vous remercie d'avance

  2. #2
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Une petite recherche sur la fonction to_date dans le forum et tu trouveras ta solution.

    Mais rien de grave tout ceci est un pb d'affichage !!


    : permets de gargner un temps fou

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Points : 61
    Points
    61
    Par défaut
    J'ai essayer la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update utilisateurs set date_derniere_connexion=to_date(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') WHERE ID_UTILISATEUR=122
    Malheureusement il ne n'ajoute dans la table que la date, il ne veut pas ajouter l'heure de la derniere connexion

  4. #4
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    heu le champs date_derniere_connexion n'est pas du type date ?

    si non il faut qu'il le soit et l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update utilisateurs set date_derniere_connexion=SYSDATE WHERE ID_UTILISATEUR=10
    fonctionnera

    pour l'affichage à toi de donner le format exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select to_char(date_derniere_connexion,'DD/MM/YYYY HH24:Mi:SS') from utilisateurs WHERE ID_UTILISATEUR=10

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par wormseric
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    to_date(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')
    Oulala jamais ça!

    Il faut essayer de ne pas faire la confusion entre les types date et les types chaine. Le gros défaut d'oracle est qu'il ne dit rien, fait des conversions implicites et donc entretient cette confusion....

    Si ton champ est de type date, tu y met une date, donc sysdate directement. Ensuite, les seuls types de données affichables sont les types caractères (char, varchar2 etc...). Dés qu'on veux afficher autre chose que des caractères, il faut bien comprendre que oracle décide tout seul de faire une conversion à partir de formats par défauts définis dans la session (ex: NLS_DATE_FORMAT). Il fait des to_char en quelques sortes...

    lorsqu'on tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select sysdate from dual;
    oracle exécute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select to_char(sysdate,NLS_DATE_FORMAT) from dual
    Attention ceci se fait aussi dans l'autre sens, si tu affectes une chaine de caractère à un champ date, oracle va faire un to_date implicite toujours avec le meme format...

    De la même manière si tu appelle une fonction qui demande une chaine de caractère en entrée (comme to_date) avec une date, oracle va la aussi faire une conversion implicite....

    donc lorsque tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_date(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')
    en fait oracle exécute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_date(to_char(SYSDATE,NLS_DATE_FORMAT), 'DD/MM/YYYY HH24:MI:SS')


    si tu ne veux pas dépendre de ce fameux NLS_DATE_FORMAT (qui peux beaucoup fluctuer selon les circonstances...) alors mets des dates dans les champs dates et des caractères dans les champs caractères (et donc à l'affichage aussi)

    si ton champ date_derniere_connexion est bien du type date, alors ton premier update est parfait...

    Puis si tu veux l'affficher avec les heures à la française ou comme tu veux, alors n'affiche pas le champ directement (= conversion implicite) mais fait toi même un to_char, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select  to_char(date_derniere_connexion,'DD/MM/YYYY HH24:MI:SS')
       from utilisateurs 
    WHERE ID_UTILISATEUR=10
    PS: tu peux aussi jouer sur les paramètres de session par des "ALTER SESSION" mais si tu peux éviter...

Discussions similaires

  1. Afficher "Annexes" au lieu de "Chapitre"
    Par Dan_coyle dans le forum Mise en forme
    Réponses: 19
    Dernier message: 19/05/2009, 16h52
  2. Afficher "Vrai" au lieu de True
    Par Tiken dans le forum Bases de données
    Réponses: 5
    Dernier message: 22/10/2008, 18h20
  3. Afficher 001 au lieu de 1
    Par _Remy_ dans le forum SQL
    Réponses: 5
    Dernier message: 01/10/2008, 12h13
  4. Réponses: 3
    Dernier message: 17/09/2008, 21h15
  5. Afficher é au lieu de é dans un textarea
    Par bucky3325 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 22/12/2006, 13h42

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