Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2011, 21h48   #1
Membre à l'essai
 
Inscription : décembre 2007
Messages : 101
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 101
Points : 22
Points : 22
Par défaut Conversion minutes en jour

Oracle 10G

Bonjour,
Je voudrais convertir un nombre en format varchar2 en jours-heure-mm.

Exemple : 4520

Le résultat serait 3j 3:20

J'ai trouvé ce code
Code :
v_temps := v_jours||'j '||to_char(to_date(v_heure_diff, 'SSSSS'),'HH24:MI');
Je peux utiliser le code suivant pour les heures et minutes mais pour le jours?

Code :
to_char(to_date(v_heure, 'SSSSS'),'HH24:MI');
Merci beaucoup!
Marcel Chabot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 23h43   #2
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Regarde ce lien, il propose plusieurs fonctions intéressantes:
http://sheikyerbouti.developpez.com/...age=Chap3#L3.4
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 13h38   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 529
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 529
Points : 6 458
Points : 6 458
Code :
1
2
 
SELECT Round(4520 / 1440) J, Round(mod(4520,1440)/60) H, mod(4520,1440) - (60*Round(mod(4520,1440)/60)) M FROM dual
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 16h11   #4
Membre à l'essai
 
Inscription : décembre 2007
Messages : 101
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 101
Points : 22
Points : 22
Merci beaucoup!!!

Voici mon ma ligne de code

Code :
1
2
 
v_jours := Round(v_temps_minutes / 1440) ||'J '|| Round(mod(v_temps_minutes,1440)/60) ||':' || (mod(v_temps_minutes,1440) - (60*Round(mod(v_temps_minutes,1440)/60))) ;
Marcel Chabot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 16h14   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avec la fonction built-in :
Code :
1
2
3
4
5
6
SELECT REPLACE(substr(to_char(numtodsinterval(4520, 'MINUTE')), 10, 7), ' ', 'J ') AS res
  FROM dual;
 
RES     
--------
3J 03:20
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 16h25   #6
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 529
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 529
Points : 6 458
Points : 6 458
Plus concis, c'est clair
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 16h57   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Reste la question de la performance :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
declare
    vs$jours   varchar2(10);
    vn$minutes pls_integer;
    vd$debut   timestamp;
    vn$duree   pls_integer;
 
begin
    vn$duree := 1e7;
 
    vd$debut := systimestamp;
    FOR i IN 1..vn$duree
    loop
      vn$minutes := trunc(dbms_random.value(1, 10000));
      vs$jours   := Round(vn$minutes / 1440) ||'J '|| Round(mod(vn$minutes,1440)/60) ||':' || (mod(vn$minutes,1440) - (60*Round(mod(vn$minutes,1440)/60)));
    end loop;
    dbms_output.put_line('Test1 : ' || to_char(systimestamp - vd$debut));
 
    vd$debut := systimestamp;
    FOR i IN 1..vn$duree
    loop
      vn$minutes := trunc(dbms_random.value(1, 10000));
      vs$jours   := REPLACE(substr(to_char(numtodsinterval(vn$minutes, 'MINUTE')), 10, 7), ' ', 'J ');
    end loop;
    dbms_output.put_line('Test2 : ' || to_char(systimestamp - vd$debut));
 
end;
/
 
Test1 : +000000000 00:00:34.391000000
Test2 : +000000000 00:01:23.797000000
Plus concis, mais trois fois plus lent !
Oracle est vraiment beaucoup plus rapide sur les opérations numériques que sur les opérations de chaînes de caractères.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 17h12   #8
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 529
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 529
Points : 6 458
Points : 6 458
tout est relatif. 3 fois un pouillème, ça fait toujours pas bien lourd...
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h20.


 
 
 
 
Partenaires

Hébergement Web