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 :

Contrôler la validité d'une date dans le SELECT


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut Contrôler la validité d'une date dans le SELECT
    Bonjour,

    Dans mon champ DATLIV j'ai des dates au format 'RRRRMMDD' et d'autres au format 'DDMMRRRR' (oui oui je sais c'est mal mais le programme d'intégration date de 10 ans et contrôler la validité des dates n'a pas été pensée lors de sa création ).

    Je ne peux malheureusement pas passer par une fonction pour vérifier si ma date est au format 'RRRRMMDD' ou au format 'DDMMRRRR', ça serait trop simple.
    Du coup j'aimerais mettre une condition dans mon SELECT. Si il ne râle pas au format 'RRRRMMDD' alors on affiche la date au format 'RRRRMMDD' sinon au format 'DDMMRRRR', bref un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DECODE(TO_DATE('30112011', 'YYYYMMDD'), TO_DATE('30112011', 'YYYYMMDD'), TO_DATE('30112011', 'DDMMYYYY')) FROM DUAL
    mais ça ne fonctionne pas .

    Avez-vous une idée ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Tu peux normalement utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TO_CHAR(TonChamp, 'DDMMRRRR')
    FROM DUAL

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    Le soucis c'est que ma date ne sera plus bonne.
    Par exemple pour le 30 novembre 2011 je peux avoir deux formats de date dans mon champ, 30112011 et 20111130. Du coup je ne sais pas comment contrôler le format de la date.

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Ma solution te permet de formater toute tes dates au format que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TO_CHAR(TonChamp, 'RRRRMMDD')
    TO_CHAR(TonChamp, 'RRRR/MM/DD')
    TO_CHAR(TonChamp, 'RRRR-MM-DD')
    [EDIT] : j'ai retrouvé la faq qui en parlait

  5. #5
    Membre averti
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    La solution de Waldar fonctionne .
    Merci à tous les deux pour vos réponses rapides et votre aide.
    Je passes le sujet en résolu.

  6. #6
    Expert confirmé 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
    Par défaut
    La chaîne des caractères "20012002" c'est qu'elle date 20/01/2002 ou 2001/20/02 ?

  7. #7
    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
    Vous pouvez passer par une fonction, attention c'est très "quick & dirty", j'y aurai à redire mais pas le temps d'approfondir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    create or replace function f_chk_date ( p$_input in varchar2 )
    return date
    is
    begin
        return(to_date(p$_input, 'YYYYMMDD'));
        exception WHEN OTHERS THEN
          return(to_date(p$_input, 'DDMMYYYY'));
    end;
    /
     
    select f_chk_date('30112011') as dt1
         , f_chk_date('20111201') as dt2
      from dual;
     
    DT1        DT2       
    ---------- ----------
    30/11/2011 01/12/2011

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

Discussions similaires

  1. [Débutant] contrôler la validité d'une date sous SQlite
    Par noftal dans le forum VB.NET
    Réponses: 5
    Dernier message: 26/09/2013, 00h33
  2. Réponses: 10
    Dernier message: 16/05/2008, 19h29
  3. Réponses: 15
    Dernier message: 03/11/2005, 15h43
  4. insérer une date dans une table mssql
    Par ericmart dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/01/2004, 10h37
  5. test la valeur d'une date dans une requete
    Par TuxP dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 14h53

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