[SQL] Optellen minuten

Pagina: 1
Acties:
  • 525 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Anoniem: 205961

Topicstarter
Voor school ben ik bezig met het maken van een urenregistratiesysteem in oracle met behulp van het programma forms.
Ik ben nog niet ervaren met SQL, Oracle en forms dus we hebben het simpel gehouden, doorlopen in de nacht hoeft niet etc.
Per student wil ik nu het totaal aantal uren uitrekenen wat ze gewerkt hebben.

Relevante invoervelden:
Datum
Begintijd UUR
Begintijd MIN
Eindtijd UUR
Eindtijd MIN

Doormiddel van een button met een trigger erachter moet het totaal aantal uren worden uitgerekend.
Werkende code voor het optellen van de uren.
BEGIN
select (SUM(uureinduur))-(SUM(uurbeginuur))
into :TOTAAL_UREN
from uren
where uur.studentnr = :student.studentnr
END;
Nu ben ik op zoek naar een manier om de minuten op te tellen, maar ik kom er helaas niet uit door een gebrek aan kennis denk ik.
PS. Trunk werkt niet.

Acties:
  • 0 Henk 'm!

Anoniem: 14829

SQL:
1
2
3
4
5
6
BEGIN
select SUM(((60 * uureinduur) + uureindmin) - ((60 * uurbeginuur) + uurbeginmin))
into :TOTAAL_MINUTEN
from uren
where studentnr = :student.studentnr
END;

Acties:
  • 0 Henk 'm!

Anoniem: 205961

Topicstarter
Nu krijg ik het totaal aantal minuten.
Dus mogelijk meer dan 100, wanneer het meer dan 59 min is wil ik dat deze bij TOTAAL_UREN geteld hebben.
Enig idee?

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 03-06 18:08

Robtimus

me Robtimus no like you

Zoek eens naar de termen DIV en MOD. Geen idee hoe die in je RDBMS zijn geimplementeerd, maar het principe werkt altijd hetzelfde.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Anoniem: 205961

Topicstarter
Gelukt, bedankt voor het meedenken =)
Heb wel het gevoel dat het erg omslachtig is maar goed.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
Begin
    Select (((MOD((sum(((uureinduur*60)+(uureindmin))-((uurbeginuur)r*60)+(uurbeginmin)))/60),1))/100)*60)
    into :totaal.totaalmin
    from uren
    where studentnr= :student.studentnr
end;

Begin
    Select (MOD((sum(((uureinduur*60)+(uureindmin)))-((uurbeginuur*60)+(uurbeginmin)))/60),0))-(MOD((sum(((uureinduur*60) +(uureindmin))-((uurbeginuur*60)+(uurbeginmin)))/60),1))
    into:totaal.totaaluur
    from uren
    where studentnr= :student.studentnr
END;

Acties:
  • 0 Henk 'm!

Anoniem: 48679

Ehm, bij ons geven ze ook uren en minuten in maar we slaan ze wel op als DATE. En dan rekent het wel makkelijker vind ik. Kijk eens naar de TO_DATE functie en dan

#uren is dan
((r_tpd.hour_to - r_tpd.hour_from)*24)
(zonder de *24 is het in dagen)

Acties:
  • 0 Henk 'm!

Anoniem: 14829

2 Queries lijkt me nogal onnodig. Wanneer je mijn voorbeeld pakt, dan is het aantal uren
TOTAAL_MINUTEN div 60, en het resterende aantal minuten TOTAAL_MINUTEN mod 60.

Overigens heb ik m'n twijfels over de correctheid van jouw oplossing, maar hij is iig nodeloos ingewikkeld...

Acties:
  • 0 Henk 'm!

Anoniem: 205961

Topicstarter
Goed gezien, dacht dat het werkte, maar helaas.
Na even puzzelen, hmm na veel puzzelen als oracle/sql newb ;) ben ik tot dit gekomen.
Dit is 1 van de codes achter de trigger, moest er een aantal maken namelijk.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
BEGIN
select FLOOR (SUM((((60 * uureinduur) + uureindmin) - ((60 * uurbeginuur) + uurbeginmin))/60))
into :TEXT_ITEM12
from uur
where klascode=:klas.klascode AND vakcode=:vak.vakcode;
END;

BEGIN
select MOD(SUM(((60 * uureinduur) + uureindmin) - ((60 * uurbeginuur) + uurbeginmin)),60)
into :TEXT_ITEM13
from uur
where klascode=:klas.klascode AND vakcode=:vak.vakcode;
END;


Bedankt voor het meedenken allemaal.

Acties:
  • 0 Henk 'm!

Anoniem: 14829

Die klopt! :)
2x ongeveer dezelfde query is op zich nog steeds overbodig, maar als je nu niet tegen performance problemen oploopt, zou ik 't zo laten totdat je wat meer thuis bent in Oracle en Oracle Forms.

Acties:
  • 0 Henk 'm!

  • thisbeingme
  • Registratie: Oktober 2002
  • Laatst online: 06-05-2021
Persoonlijk zou ik deze liever opslaan als zijnde timestamp / datetime field? Daar is gewoon heel goed mee te rekenen imo :)

Puur uit ervaring met MySQL, kan anders zijn voor oracle natuurlijk :P
Pagina: 1