von Barlee » Sa, 11.07.2009 15:09
Hallo Bencard,
Im Vergleich zur bestehenden Abfrage, die ja Zeiten addiert, sollte man das dadurch erreichen, dass die Vergleichsoperatoren umgekehrt werden. Auch ist ggf. eine 1 zur Stundendifferenz zu addieren (wenn Minutenzahl von Zeit2 >Minutenzahl von Zeit1)
Also:
Code: Alles auswählen
SELECT
"Zeit1",
"Zeit2",
ABS(
CASE WHEN (extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1
END
) AS "Stunden",
ABS(
datediff( 'mi', "Zeit1", "Zeit2" ) -
(CASE WHEN extract(MINUTE from "Zeit1") >=extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1 END ) * 60
) AS "Minuten",
CAST(
CAST(
ABS(CASE WHEN
(extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1
END)
AS INTEGER) ||':'||
CAST(
ABS(datediff( 'mi', "Zeit1", "Zeit2" ) -
(CASE WHEN extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1 END ) * 60)
AS INTEGER)||':00'
AS TIME) AS "Zeit_neu"
FROM
"[Tabelle]"
Das Beispiel zieht "Zeit2" von "Zeit1" ab. Sekunden bleiben unberücksichtigt.
... am einfachsten wäre es allerdings, bei solchen Aufgabenstellungen ein DB-System zu benutzen, das vergleichbare Funktionen bereitstellt
Gruß Barlee
Hallo Bencard,
Im Vergleich zur bestehenden Abfrage, die ja Zeiten addiert, sollte man das dadurch erreichen, dass die Vergleichsoperatoren umgekehrt werden. Auch ist ggf. eine 1 zur Stundendifferenz zu addieren (wenn Minutenzahl von Zeit2 >Minutenzahl von Zeit1)
Also:
[code]
SELECT
"Zeit1",
"Zeit2",
ABS(
CASE WHEN (extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1
END
) AS "Stunden",
ABS(
datediff( 'mi', "Zeit1", "Zeit2" ) -
(CASE WHEN extract(MINUTE from "Zeit1") >=extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1 END ) * 60
) AS "Minuten",
CAST(
CAST(
ABS(CASE WHEN
(extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2") )
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1
END)
AS INTEGER) ||':'||
CAST(
ABS(datediff( 'mi', "Zeit1", "Zeit2" ) -
(CASE WHEN extract(MINUTE from "Zeit1") >= extract(MINUTE from "Zeit2")
THEN datediff( 'hh', "Zeit1", "Zeit2" )
ELSE datediff( 'hh', "Zeit1", "Zeit2" )+1 END ) * 60)
AS INTEGER)||':00'
AS TIME) AS "Zeit_neu"
FROM
"[Tabelle]"
[/code]
Das Beispiel zieht "Zeit2" von "Zeit1" ab. Sekunden bleiben unberücksichtigt.
... am einfachsten wäre es allerdings, bei solchen Aufgabenstellungen ein DB-System zu benutzen, das vergleichbare Funktionen bereitstellt
Gruß Barlee