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

  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
    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

  4. #4
    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.

  5. #5
    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

  6. #6
    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.

  7. #7
    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 ?

  8. #8
    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
    Ca peut être les deux, tout dépend de comment sont déclarées les dates dans ta base de données.

    Si tu ne peux pas accéder aux types de tes champs le mieux est de faire une requête pour formatter ta date en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT <TonChampDate> Date_Init, TO_CHAR(<TonChampDate>, 'DD/MM/RRRR') Date_format
    FROM <TaTable>
    Tu auras comme résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Date_Init | Date_format
    20012002  | 20/01/2002 ou 20/02/2001

  9. #9
    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
    Lola06, vous prenez le problème à l'envers : kyra2778 a des varchar2 qu'il souhaite convertir en date !

    Mnitu, je me suis posé la question, mais tant qu'on reste dans les années 2000 on n'a pas de problème.
    En effet, il n'y a pas de mois numéro 20 !

  10. #10
    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
    Oui oui je confirme, ce n'est que des années en 2000

  11. #11
    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
    Citation Envoyé par Waldar Voir le message
    Lola06, vous prenez le problème à l'envers : kyra2778 a des varchar2 qu'il souhaite convertir en date !

    Mnitu, je me suis posé la question, mais tant qu'on reste dans les années 2000 on n'a pas de problème.
    En effet, il n'y a pas de mois numéro 20 !
    Oupss, j'ai lu trop vite...

    Sinon il faudrait comparer avec d'autres dates.
    Imaginons que 20012002 soit 20/02/2001 alors il n'est pas possible de trouver des dates du style : 20012020. Idem pour l'autre solution.

  12. #12
    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
    Citation Envoyé par Waldar Voir le message
    ...Mnitu, je me suis posé la question, mais tant qu'on reste dans les années 2000 on n'a pas de problème.
    En effet, il n'y a pas de mois numéro 20 !
    Oui ça devrait être vrai
    Bref, mon point de vue est que la colonne contient des chaines de caractères de type date dans un format précisé. Les valeurs qui ne respectent pas ce format devraient être corrigées.

  13. #13
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Déjà qu'avec la crise on n'aura pas de 13ème mois, le 20ème, je le sens mal

+ 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