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 :

Format de date différent selon users


Sujet :

Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 46
    Points : 43
    Points
    43
    Par défaut Format de date différent selon users
    Bonjour à tous!

    Alors voilà, je travaille sur une base oracle que je n'ai pas monté moi même et qui comprend plusieurs utilisateurs (même structures données différentes).

    Je cherche à remonter une date sous un format précis. Dans ma table elle apparaît au format 'DD/MM/YY' je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_char(madate, 'YYYYMMDD') from matable
    ça me remonte bien quelque chose mais pour certains utilisateurs cela agit "normalement" c'est à dire que si le champ contient par exemple '20/10/15' on récupère '20151020'.

    Et cependant sur d'autres utilisateurs ça agit bizarrement et ça me remonte '00151020'

    Je re-précise que c'est le même champ de la même table.

    Je n'ai pas monté les structures moi même donc je ne sais pas si cette différence est normale, mais en tout cas j'aimerai savoir comment "forcer" la base de l'utilisateur bizarre à mieux traiter ses objets date.

    Merci à vous

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Quel est le type des données de la zone madate : date ou varchar2 ?

    Une date n’a pas de format, elle à une représentation interne fixe. Le format existe seulement pour afficher la date comme une chaine des caractères ou pour transformer une chaine des caractères en type date.

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    C'est bien une date mais je soupçonne qu'elle a été renseignée directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert madate into matable values ('20/10/15');
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert madate into matable values (to_date('20/10/2015','DD/MM/YY'));
    est ce que c'est possible et est ce que oui ça pourrait jouer?

    Merci

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Une fois que la date a été insérée dans la base elle est bien déterminée et concerne soit l'année 2015 soit l'année 15!

    Quand, pour insérer dans une table ayant une colonne de type date, vous fournissez une chaîne des caractères, une conversion implicite doit avoir lieu parce qu'une date n'est pas une chaine des caractères. Cette conversion implicite utilise le contenu de la variable d’environnement NLS_DATE_FORMAT pour trouver le format. Mais se baser sur des conversions implicite est source d'erreurs. Donc vous devez toujours convertir la chaîne des caractères supposant à représenter la date via une conversion explicite (To_date) et utilisez le format approprié.

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Ah d'accord donc oui apparemment les 2 dates exemples ont été insérées différemment , celle concernant l'année 15 n'ayant pas été insérée via un to_date .

    La question reste ouverte sur le moyen de rétablir cette mauvaise insertion pour qu'elle reprenne un bon format.

    Vu que je devais agir vite j'ai fait un truc dont je ne me souviens pas vraiment n'étant plus sur place mais qui était à mon avis assez crade , un truc genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update matable set madate = to_date((to_number(to_char(madate,'YYYYMMDD'))+20000000),'DD/MM/YYYY')
    comme j'ai dit je ne me souviens plus de la syntaxe exacte que j'ai utilisée mais le principe étant d'ajouter 2000 à mon année et re-transformer tout ça en date.

    Donc y aurait il une solution moins "bricolage"?

    Merci!

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    C'est clair que c'est laid... Les bonnes dates ont aussi été incrémentées non ? en plus il y a perte des heures min sec...
    J'aurais fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE matable 
       SET madate = to_date('20' || substr(to_char(madate,'YYYYMMDDHH24MISS'),3),'YYYYMMDDHH24MISS')
     where substr(to_char(madate,'YYYYMMDDHH24MISS'),1,2)='00'
    Après ça reste forcément du bricolage.

  7. #7
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Ce champ est de toute manière une date renseignée sans heure donc c'est pas grave pour mon cas particulier. Et pour mon cas particulier toujours, toutes mes dates étaient censées être supérieures à 2000 et elles étaient toutes pourries donc je ne me suis pas souciée d'un "where". Mais effectivement ta solution semble plus propre que la mienne pour une table moins "uniformément pourrie"^^

    Je vais mettre le sujet en résolu mais si jamais quelqu'un a une autre solution "qu'elle est encore meilleure" n'hésitez pas

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

Discussions similaires

  1. [MySQL] Format de date différent entre PHP et ASP
    Par lekev62 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/06/2009, 12h36
  2. Format de date différent selon PC ?
    Par Basicnav dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 10/06/2009, 10h22
  3. Change le format de date selon l'OS
    Par Ohemeg dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 25/02/2008, 15h02
  4. [Dates] Format de date différent strtotime
    Par sebaaas dans le forum Langage
    Réponses: 1
    Dernier message: 14/10/2007, 21h30
  5. [Dates] affichage différent selon le mois en cours
    Par itri2005 dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2006, 17h05

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