Résultats de 1 à 3 sur 3

Sujet : Oracle et date

  1. #1

    Oracle et date

    : nous voulons récupérer ce programme sous la forme d’une fonction diff_dates(date_fin date, date_deb date) qui enverra la différence en secondes. Seulement les dates qui seront entrées lors de l’appel de la fonction même si nous les donnons à la seconde près vont être réduites au format jj-mm-yyyy par le système lors de l’appel de la fonction. Ce qui est bizarre !!!
    Exemple1 : le programme diff_date à éxecuter sous sqlplus ou sqlplus WorkSheet

    set serveroutput on;
    declare
    diff number;
    jour number;
    minut number;
    heure number;
    seconde number;
    begin
    diff:=to_date(\'24-05-04 12:24:23\',\'dd-mm-yy hh24:mi:ss\') -to_date(\'24-05-04 11:12:15\',\'dd-mm-yy hh24:mi:ss\');
    jour:=trunc(diff);
    diff:=(diff-jour)*24;
    heure :=trunc(diff);
    diff:=(diff-heure)*60;
    minut :=trunc(diff);
    seconde:=trunc((diff-minut)*60);
    dbms_output.put_line(\'jour= \'||jour||\'
    heure=\'||heure||\'
    minute\'||minut||\'
    seconde \'||seconde );
    end;

    Exemple2 : le programme diff_dates qui est transformé en fonction et qui renvoie la différence en nombre de secondes
    create or replace diff_date(date1 in date, date2 in date) return number is
    diff number;
    jour number;
    minut number;
    heure number;
    seconde number;
    begin
    diff:=to_date(date2) -to_date(date1);
    jour:=trunc(diff);
    diff:=(diff-jour)*24;
    heure :=trunc(diff);
    diff:=(diff-heure)*60;
    minut :=trunc(diff);
    seconde:=trunc((diff-minut)*60);
    dbms_output.put_line(\'jour= \'||jour||\'
    heure=\'||heure||\'
    minute\'||minut||\'
    seconde \'||seconde );
    return(jour*86400+heure*3600+minut*60+seconde);
    end;

    éxecution
    set serveroutput on;
    declare
    dt1 date;
    dt2 date;
    begin
    dt2:=to_date(’27-05-2004 22 :34 :53’,’dd-mm-yyyy hh24-mi :ss’);
    dt1:=to_date(’27-05-2004 22 :42:56’dd-mm-yyyy hh24-mi :ss’);

    dbms_output.put_line(\'différence= \'||diff_dates(dt1,dt2) );
    end;
    diff_date(date_deb,date_fin) ne renverra que la différence de la partie dd-mm-yyyy.
    Voilà donc notre problème !
    Merci

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    13
    Bonjour;
    j\'ai trouvé une solution à votre problème, mais dans ce cas, il faut passer les dates à la fonction comme des chaines de caractères, et puis, dans le corps de la fonction, vous faites la conversion.

    voici le code:
    Create or replace Function diff_date(date1 in varchar2, date2 in varchar2) return number is
    diff number;
    jour number;
    minut number;
    heure number;
    seconde number;
    begin
    diff:=to_date(date2,\'DD-MM-YY HH24:MI:SS\') -to_date(date1,\'DD-MM-YY HH24:MI:SS\');
    jour:=trunc(diff);
    diff:=(diff-jour)*24;
    heure :=trunc(diff);
    diff:=(diff-heure)*60;
    minut :=trunc(diff);
    seconde:=trunc((diff-minut)*60);
    dbms_output.put_line(\'jour= \'||jour||\'
    heure=\'||heure||\'
    minute\'||minut||\'
    seconde \'||seconde );
    return(jour*86400+heure*3600+minut*60+seconde);
    end;

    et vous appellez la procédure ainsi:

    execute :sec:=diff_date1(\'24-05-04 12:24:23\',\'24-05-04 12:36:36\');

    pour moi, ça a résoulu le problème.
    Bon courage
    Dival

  3. #3
    Membre MP
    Inscrit
    août 2013
    Messages
    12
    Salut,
    Je ne comprends pas tres bien pourquoi est ce que tu fais la soustraction en passant les date au format HH:Mi:SS.
    Dans tous les cas la soustraction des deux dates te retournera un nombre de jours quelque soit le format de la date.

    Je te conseille, (afin de gagner du temps d\'execution et du code) de faire la soustraction sans passer par la fonction de formatage de date.
    DATE1 - DATE2 , tu pourras passer des parametres au type DATE.

    Ensuite une fois le resultat obtenu, tu multiplie le tout par 24 * 3600.
    Reda Benkirane
    Formateur du Laboratoire SUPINFO des Technologies Oracle – Section Paris

    Web : http://www.labo-oracle.com
    Forums : http://www.labo-oracle.com/forums
    Octc : http://www.labo-oracle.com/octc

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!