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 :

Changement format de date


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 96
    Par défaut Changement format de date
    Bonjour,

    dans un table de ma base de données, j'ai un champ de type DATE avec des données mal formatées.

    Ex :
    dans mon champ j'ai 20/12/0131 (la suite de chiffres est écrite à l'envers)
    au lieu de : 31/01/2012

    Dans un SELECT j'ai besoin d'afficher la date avec le format 31/01/2012.

    Comment faire ?
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Pourquoi ne remettez-vous pas vos date correctement dans votre base ..?

    Sinon regardez des fonctions to_char et to_date pour ce genre de problématique.

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Le cas n'est pas clair...

    Si le champ est vraiment de type DATE, il ne peut pas y avoir de mauvais format.
    Si c'est un VARCHAR2 par contre, c'est une autre affaire, et là effectivement il faut corriger les données (et les procédures de modification !).

    Que donne tout simplement ce test basique ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SYSDATE FROM DUAL;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY') FROM DUAL;

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    J'ai compris que lors de l'insertion, il avaient tout melange, les annees, mois et jours. Chacun se retrouve a la place de l'autre, justement parce qu'ils oublie de mettre un masque comme dans votre exemple pomalaix.

    Le mieux c'est encore de reparer les betises en faisant un update et des substr. Comme ca le probleme ne se posera plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TMP@MINILHC >with tmp as (select to_date('20/12/0131','dd/mm/yyyy') as n from dual),t1 as (select n, to_char(n,'yyyy') n2,to_char(n,'ddmm') as n3 from
     tmp) select n craquage_date,substr(n2,3,2)||substr(n2,1,2)||n3 as valid_date from t1;
     
    CRAQUAGE_D VALID_DA
    ---------- --------
    20/12/0131 31012012
    Et VALID_DATE se transfomr en date avec un TO_DATE(valid_date,'ddmmyyyy')

  5. #5
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 878
    Billets dans le blog
    3
    Par défaut
    Petit conseil dans ce cas : vérifier le paramètre NLS_DATE_FORMAT avec le DBA. Il indique le format par défaut que doit prendre une date lorsqu'on l'affiche, et éventuellement lui donner un format classique DD/MM/YYYY (toujours en collaboration avec le DBA bien sûr).

    Comme cela il y aura moins de confusion lors de l'insertion ou mise à jour des champs.

    Personnellement, lorsque j'insère ou met à jour des dates dans Oracle je préfère toujours préciser un to_date('la_date_a_inserer','le_format'). On évite les mauvaises surprises.
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  6. #6
    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
    Citation Envoyé par Glutinus Voir le message
    Petit conseil dans ce cas : vérifier le paramètre NLS_DATE_FORMAT avec le DBA. Il indique le format par défaut que doit prendre une date lorsqu'on l'affiche, et éventuellement lui donner un format classique DD/MM/YYYY (toujours en collaboration avec le DBA bien sûr).
    Ce qui aura un impact limité puisque chaque session de chaque client peut changer son propre NLS_DATE_FORMAT.

    Citation Envoyé par Glutinus Voir le message
    Personnellement, lorsque j'insère ou met à jour des dates dans Oracle je préfère toujours préciser un to_date('la_date_a_inserer','le_format'). On évite les mauvaises surprises.
    OUI ! Il faut le faire.
    Notez que pour les dates sans horodatages on peut utiliser la "fonction" date avec le format ANSI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select date '2012-02-07' as dt from dual
    Qui est une écriture raccourcie de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_date('2012-02-07', 'yyyy-mm-dd') as dt from dual

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 96
    Par défaut
    Oui Rams7s, c'est ce qu'il s'est passé. Le champ dans la BD est bien de type DATE, mais les données ont été mal formatées au moment de l'insertion.
    Merci pour ton script, je vais voir comment l'utiliser

Discussions similaires

  1. changement de format de date
    Par yukonima dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 21/06/2008, 13h16
  2. Réponses: 6
    Dernier message: 21/06/2007, 15h26
  3. Changement format date excel
    Par romano54600 dans le forum Excel
    Réponses: 2
    Dernier message: 20/04/2007, 15h20
  4. [SQL 2005] Changement format date
    Par mohamed dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/12/2006, 12h55
  5. Changement format de date
    Par LaNat dans le forum Outils
    Réponses: 4
    Dernier message: 26/04/2005, 11h02

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