Ik ben momenteel bezig met het maken van een query die moet gaan uitrekenen hoe lang een bepaald programma heeft gedraaid. Ik krijg nu een getal eruit dat het aantal dagen is, dit vermenigvuldig ik met 24*60*60 om het aantal seconden te krijgen.
Dit is leuk en aardig voor de programma's met een korte runtime, maar zodra we over de paar duizend seconden gaan wordt het een beetje minder goed leesbaar.
De query:
Even een korte uitleg... 108190 is de juliandate, hier moet 1900000 bij worden opgeteld om tot het volgende te komen... 2008190, dit betekent de 190ste dag van 2008.
Het 2e getal 102543 en 94312 zijn de tijdens... lees dus als 10:25:43 en 9:43:12, bij die laatste doe ik lpad om zodoende te garanderen dat ik altijd een evenlange cijferreeks heb. Dit is nodig vanwege de concatinate "||". Die moet altijd een getal opleveren die 13 cijfers lang is.
In dit geval krijg ik dus de getallen 2008190102543 en 2008190094312.
Met 'YYYYDDD:HH24:MI:SS' vertaalt zich dit naar 08/07/2008 10:25:43 en 08/07/2008 9:43:12.
Door deze 2 waarden van elkaar af te trekken krijg ik een waarde die aangeeft hoe lang van begin tot eind het programma heeft gedraaid.
Dit komt nu dus in aantal dagen eruit... daarover doe ik de berekening *24*60*60 om uit te komen op aantal seconden. In dit geval 2551 seconden.
Deze waarde wil ik echter op de volgende manier weergeven:
000 00:42:31 (DDD HH24:MI:SS), dit is namelijk veel beter leesbaar voor de managers
42 minuut 31s leest namelijk beter dan 2551 seconden.
Ik heb werkelijk al vanalles geprobeerd maar het wil mij maar niet lukken om van het aantal seconden naar deze format te gaan.
Mijn vraag dus. Is hier een makkelijk functie voor of is dit op één of andere manier mogelijk?
Dit is leuk en aardig voor de programma's met een korte runtime, maar zodra we over de paar duizend seconden gaan wordt het een beetje minder goed leesbaar.
De query:
code:
1
2
3
4
5
6
| select ( to_date((108190+1900000)||lpad(102543,6,0), 'YYYYDDD:HH24:MI:SS') - to_date((108190+1900000)||lpad(94312,6,0), 'YYYYDDD:HH24:MI:SS') )*24*60*60 "Time in seconds" from dual; |
Even een korte uitleg... 108190 is de juliandate, hier moet 1900000 bij worden opgeteld om tot het volgende te komen... 2008190, dit betekent de 190ste dag van 2008.
Het 2e getal 102543 en 94312 zijn de tijdens... lees dus als 10:25:43 en 9:43:12, bij die laatste doe ik lpad om zodoende te garanderen dat ik altijd een evenlange cijferreeks heb. Dit is nodig vanwege de concatinate "||". Die moet altijd een getal opleveren die 13 cijfers lang is.
In dit geval krijg ik dus de getallen 2008190102543 en 2008190094312.
Met 'YYYYDDD:HH24:MI:SS' vertaalt zich dit naar 08/07/2008 10:25:43 en 08/07/2008 9:43:12.
Door deze 2 waarden van elkaar af te trekken krijg ik een waarde die aangeeft hoe lang van begin tot eind het programma heeft gedraaid.
Dit komt nu dus in aantal dagen eruit... daarover doe ik de berekening *24*60*60 om uit te komen op aantal seconden. In dit geval 2551 seconden.
Deze waarde wil ik echter op de volgende manier weergeven:
000 00:42:31 (DDD HH24:MI:SS), dit is namelijk veel beter leesbaar voor de managers
42 minuut 31s leest namelijk beter dan 2551 seconden.
Ik heb werkelijk al vanalles geprobeerd maar het wil mij maar niet lukken om van het aantal seconden naar deze format te gaan.
Mijn vraag dus. Is hier een makkelijk functie voor of is dit op één of andere manier mogelijk?