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 :

Normalisation d'une date


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 60
    Par défaut Normalisation d'une date
    Bonjour,

    J'ai un problème dans une table, les dates entrées dans une colonne ne sont pas toutes au même format à cause de l'utilisation de différent logiciel.
    Je me retrouve avec des dates au format '12/31/2001' mais également '12/31/0001'.
    (la colonne est de type date MM/DD/YYYY HH:MI:SS AM)

    Actuellement, j'utilise un script en PL/SQL car mes differents tests de requete me renvoient des erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT to_char(to_date(t_date, 'MM/DD/YYYY'), 'DD/MM/YYYY' FROM table
    il me retourne
    ORA-01858: a non-numeric character was found where numeric was expected
    Si j'utilise la fonction extract, j'ai des problème dans l'extraction de l'année puisqu'il trouve 1 et non 2001 !

    Auriez vous une requete SQL qui puisse faire çà ?

  2. #2
    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
    Si la colonne est de type DATE, alors il ne faut jamais faire de to_date dessus. To_date prend une chaine de caractère en entrée et renvoie une date.

    Si un logiciel a inséré une date 12/31/0001 (qui est une date valide), alors il faut que tu les modifies manuellement en rajoutant 2000 ans


    PS :
    (la colonne est de type date MM/DD/YYYY HH:MI:SS AM)
    Une date n'a pas de format en base, le format c'est pour l'affichage utilisateur avec un to_char

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2011
    Messages : 60
    Par défaut
    En effet, j'ai pris la mauvaise habitude d'utiliser to_date car je manipule surtout des timestamps...

    Par contre, tu viens de me donner une idée. J'ai utilisé la fonction Case When + 2000 ou + 1900 pour générer de bonne année que je mets ensuite en forme via to_date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT to_date(
      extract(day from t_date) || '/' ||
      extract(month from t_date) || '/' ||
      CASE
         WHEN extract(year from t_date) between 0 and 12 THEN extract(year from t_date) + 2000 
         WHEN extract(year from t_date) between 50 and 99 THEN extract(year from t_date) + 1900
    ELSE extract(year from t_date) 
    END
    , 'DD/MM/YYYY')
    FROM table
    Encore merci pour ton aide.

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

Discussions similaires

  1. [Crystal] transformation d'une date en numéro de semaine
    Par barna dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/03/2017, 09h41
  2. Récupérer l'année d'une date
    Par delphim dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/01/2003, 16h33
  3. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54
  4. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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