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]

Antwort per Email an