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

PL/SQL Oracle Discussion :

Comparer 2 dates sous PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut Comparer 2 dates sous PL/SQL
    Salut,


    J'arrive pas à faire la difference entre 2 dates, le problème est que:
    J'ai une procedure stockée avec une paramètre en entréee qui est une date et dans la procedure je dois verifier si la date d'entrée est plus grande que les dates dans une table alors j'ai fait (date d'entréee - date dans la table )mais ce qui est bizard que qd j'entre la meme date, il affiche pas 0....
    Comment on fait pour comparer 2 dates, sous Oracle

    Merci,

  2. #2
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    salut,
    il ne faut pas oublier que les dates contiennent également l'heure (et minutes, et secondes, ...)

    alors si tu veux ne comparer que le JOUR, utilise la fonction TRUNC sur chacune de tes dates à comparer pour ramener toutes le heures, minutes, etc... à 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select trunc(sysdate) - trunc(sysdate) from dual
    remène effectivement 0

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    Merci pour la réponse, ce que je comprends que sous Oracle il y a pas de fontions pour comparer les dates que faire la soustraction.

  4. #4
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut
    Citation Envoyé par 18Marie
    ce que je comprends que sous Oracle il y a pas de fontions pour comparer les dates que faire la soustraction.

    ???? Pourquoi tu dis ça ?

    Sous Oracle tu peux comparer des dates avec =, >, <, etc et en plus tu peux soustraire des dates ce qui te donne un nombre de jour.

    Ce que Yorglaa te dis c'est qu'il faut faire attention quand tu compares des dates car le format interne est en realité DATETIME et donc si tu fais un test d'égalité deux dates ne sont égales que si elles sont exactement égales à la seconde pres ! D'ou le TRUNC pour arrondir a la journée pres.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Ce qu'elle voudrait à mon avis ce sont des fonctions tout faites du style : GET_NB_DAY(DATE_DEBUT, DATE_FIN) qui calculerait le nombre de jour entre les 2 dates fournies en paramètre, etc.

  6. #6
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut
    Et bien si c'est cela une simple soustraction le fait directement. Pas besoins de fonction. Le resultat est en jours avec eventuellement un partie decimale.

    Par exemple 02/01/2007 12:00 - 01/01/2007 00:00 donnera 1,5 soit un jour et 12heures

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    Merci pour vos aides,
    C vraiment ce que je cherche ce sont des fonctions dèjà faits....

    Quand on compare 2 dates avec <,>, est-que les 2 dates doivent etre de type date car moi j'ai 2 dates dont le premier est de type Date et le deuxieme de type String et ca marche alors, je ne sais pas si par hazard que ca fonctionne ???

    Merci

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Par défaut
    bonjours j'écrit ici car mon probleme est sensiblement le meme que celui evoqué.

    voila je fait un programme PL/SQL dans lequel je compare deux dates la premiere et recupéré dans un curseur et la seconde est celle du systeme (sysdate) à laquelle je retranche un nombre de jours qui et un number passé en parrametre de la procedure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    begin
        open cur;
        for varcur in cur loop
            if (trunc (varcur.date_deb_reserv) < (trunc(sysdate) - NbJours) ||
                trunc (varcur.date_annulation) < (trunc (sysdate) - NbJours)))
        then
            insert into archive values (varcur.num_client,varcur.nom_client,
                    varcur.prenom, varcur.num_reservation, varcur.num_hotel,
                    varcur.nb_cl_invite, varcur.nb_enfant_invit,
                    varcur.Date_deb_Reserv, varcur.date_annulation);
            end if;
        end loop;
    end;
    losque je créé ma procedure j'ai les erreurs suivantes :

    26/44 PLS-00103: Encountered the symbol "<" when expecting one of the
    following:
    . ( ) , * % & - + / at mod remainder rem <an exponent (**)>
    and or ||
    The symbol ")" was substituted for "<" to continue.

    26/73 PLS-00103: Encountered the symbol ")" when expecting one of the
    following:
    * & - + / at mod remainder rem then <an exponent (**)> and or
    || multiset year DAY_


    pour info "cur" est mon curseur.Et la ligne 26 est "if (trunc ..."

    quelqu'un peut il m'éclairer??

  9. #9
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IF (trunc (varcur.date_deb_reserv) < (trunc(sysdate) - NbJours) ||
                trunc (varcur.date_annulation) < (trunc (sysdate) - NbJours)))
    A la place il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IF (trunc (varcur.date_deb_reserv) < (trunc(sysdate) - NbJours) and 
                trunc (varcur.date_annulation) < (trunc (sysdate) - NbJours)))

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Par défaut
    merci beaucoup

  11. #11
    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
    Le || c'est un OR non ?
    le && c'est un AND

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 36
    Par défaut
    Citation Envoyé par McM
    Le || c'est un OR non ?
    le && c'est un AND
    Effectivement ...

  13. #13
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut
    Citation Envoyé par McM
    Le || c'est un OR non ?
    le && c'est un AND

    Euh vous parlez quelle langue ? en C ok mais en PL/SQL il faut employer OR et AND

Discussions similaires

  1. Comment comparer 2 dates sous DOS
    Par Isilog dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 05/03/2009, 17h23
  2. Comparer des dates en T-SQL
    Par AbyssoS dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/03/2006, 16h06
  3. [SQL2K] requête SQL, comparer des dates
    Par cortex024 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/03/2006, 14h32
  4. [SQL] Comparer 2 dates
    Par hoaxpunk dans le forum Oracle
    Réponses: 2
    Dernier message: 24/01/2006, 20h26
  5. format date sous postgres sql
    Par ruppert62 dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 27/05/2005, 12h04

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