Hallo @all
An die Datenbankspezialisten:
Gibt es eine Funktion mit der man Uhrzeiten über die Tagesgrenze direkt
addieren kann?
Bislang benötige ich zwei Abfragen zur korrekten Darstellung.
Zum konkreten Fall:
Ich habe eine HSQLDB mit mehreren Tabellen erstellt. Eine Tabelle
dient zur Erfassung von Arbeitsstunden. Arbeitsbeginn und -ende
werden aus Stundenzetteln übernommen.
Probleme treten immer dann auf, wenn die Arbeitszeit über 00:00 des
folgenden Tages hinaus geht.
Beipiel:
Mitarbeiter 140-10002
Tag1 von 07:30 bis 23:30 (ergibt 16 Std)
Tag2 von 08:30 bis 20:30 (ergibt 12 Std)
Tag3 von 08:30 bis 00:15 (ergibt 15,75 Std)
SQL-Abfrage: SELECT "ID", "Mitarb_Nr", ROUND( DateDiff( 'mi', "Beginn",
"Ende" ), 2 ) / 60 FROM "Std_Arbeitplatz"
führt zu folgendem Ergebnis:
Tag1 16 Std
Tag2 12 Std
Tag3 -8,25 Std
Um dieses Problem zu umgehen haben ich zwei Abfragen in der
Entwurfansicht erstellt:
1. SQL-Abfrage
SELECT "ID", "Mitarb_Nr", ROUND( DateDiff( 'mi', "Beginn", "Ende" ),
2 ) / 60, SIGN( DateDiff( 'mi', "Beginn", "Ende" ) ) FROM
"Std_Arbeitsplatz"
Dies führt zu folgendem Ergebis:
ID | Mitarb_Nr | ROUND(DateDiff ... | SIGN(DateDiff ...
: |
17 | 140-10002 | 16 | 1
18 | 140-10002 | 12 | 1
19 | 140-10002 | -8,25 | -1
: |
2. SQL-Abfrage
SELECT "ID", "Mitarb_Nr", "ROUND( DateDiff( 'mi', "Beginn", "Ende" ),
2 ) / 60", "SIGN( DateDiff( 'mi', "Beginn", "Ende" ) )",
CASEWHEN( "SIGN( DateDiff( 'mi', "Beginn", "Ende" ) )" = - 1,
( "ROUND( DateDiff( 'mi', "Beginn", "Ende" ), 2 ) / 60" + 24 ),
( "ROUND( DateDiff( 'mi', "Beginn", "Ende" ), 2 ) / 60" ) ) FROM
"V_AZr_SIGN_Arbeitsplatz"
Dies führt zum Enderbenis:
ID | Mitarb_Nr | ROUND(DateDiff ... | SIGN(Date... | CASEWHEN("SIGN ...
: |
17 | 140-10002 | 16 | 1 | 16
18 | 140-10002 | 12 | 1 | 12
19 | 140-10002 | -8,25 | -1 | 15,75
: |
Mit diesen beiden Abfragen erhalte ich die korekte Stundenangabe.
Gruß
Michael
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]