von Barlee » Di, 26.05.2009 22:05
Hallo geimist,
Gibt es einen Tipp...
Benutze für solche Berechnungen nicht HSQLDB, sondern eine richtige DB.

Im Ernst. HSQLDB unterstützt derzeit keine Berechnung von Zeiten, wie man es von anderen DB Systemen gewohnt ist. Insofern sollte es eine Überlegung wert sein.
Trotzdem habe ich einmal versucht, das Problem mit der Base internen DB zu lösen.
("SQL direkt ausführen" muss aktiviert sein)
Code: Alles auswählen
SELECT
"Start", "Dauer", "STD_NEU","MIN_NEU","SEK_NEU",
CAST("STD_NEU"||':'||"MIN_NEU"||':'||"SEK_NEU" AS TIME)as "ZEIT_NEU"
FROM
(
SELECT
"Start", "Dauer", "std","min","sek",
(CASE
WHEN "sek" >= 60 THEN
CASE
WHEN "min"+1 >=60 THEN
CASE
WHEN "std"+1 >=24 THEN "std"+1-24
ELSE "std"+1
END
ELSE --min <60
CASE
WHEN "std" >=24 THEN "std"-24
ELSE "std"
END
END
ELSE --sekunden <60
CASE
WHEN "min" >=60 THEN
CASE
WHEN "std"+1 >=24 THEN "std"+1-24
ELSE "std"+1
END
ELSE --min <60
CASE
WHEN "std" >=24 THEN "std"-24
ELSE "std"
END
END
END) as "STD_NEU",
(
CASE
WHEN "sek" >= 60 THEN
CASE
WHEN "min"+1 >=60 THEN "min"+1-60
ELSE "min"+1
END
ELSE --sek <60
CASE
WHEN "min" >=60 THEN "min"-60
ELSE "min"
END
END
) as "MIN_NEU",
(
CASE
WHEN "sek" >= 60
THEN "sek"-60
ELSE "sek"
END
)
as "SEK_NEU"
FROM
(
SELECT
"Uhrezeit" as "Start",
"Dauer" as "Dauer",
EXTRACT(HOUR from "Uhrezeit")+EXTRACT(HOUR from "Dauer") as "std",
EXTRACT(MINUTE from "Uhrezeit")+EXTRACT(MINUTE from "Dauer") as "min",
EXTRACT(SECOND from "Uhrezeit")+EXTRACT(SECOND from "Dauer") as "sek"
from "Tabelle1"
)
as "Zeit"
)
as "Zeit1"
mit folgendem Ergebnis:

- zeit1.png (5.76 KiB) 2179 mal betrachtet
Gruß Barlee
Hallo geimist,
[quote]Gibt es einen Tipp...[/quote]
Benutze für solche Berechnungen nicht HSQLDB, sondern eine richtige DB. ;-)
Im Ernst. HSQLDB unterstützt derzeit keine Berechnung von Zeiten, wie man es von anderen DB Systemen gewohnt ist. Insofern sollte es eine Überlegung wert sein.
Trotzdem habe ich einmal versucht, das Problem mit der Base internen DB zu lösen.
("SQL direkt ausführen" muss aktiviert sein)
[code]
SELECT
"Start", "Dauer", "STD_NEU","MIN_NEU","SEK_NEU",
CAST("STD_NEU"||':'||"MIN_NEU"||':'||"SEK_NEU" AS TIME)as "ZEIT_NEU"
FROM
(
SELECT
"Start", "Dauer", "std","min","sek",
(CASE
WHEN "sek" >= 60 THEN
CASE
WHEN "min"+1 >=60 THEN
CASE
WHEN "std"+1 >=24 THEN "std"+1-24
ELSE "std"+1
END
ELSE --min <60
CASE
WHEN "std" >=24 THEN "std"-24
ELSE "std"
END
END
ELSE --sekunden <60
CASE
WHEN "min" >=60 THEN
CASE
WHEN "std"+1 >=24 THEN "std"+1-24
ELSE "std"+1
END
ELSE --min <60
CASE
WHEN "std" >=24 THEN "std"-24
ELSE "std"
END
END
END) as "STD_NEU",
(
CASE
WHEN "sek" >= 60 THEN
CASE
WHEN "min"+1 >=60 THEN "min"+1-60
ELSE "min"+1
END
ELSE --sek <60
CASE
WHEN "min" >=60 THEN "min"-60
ELSE "min"
END
END
) as "MIN_NEU",
(
CASE
WHEN "sek" >= 60
THEN "sek"-60
ELSE "sek"
END
)
as "SEK_NEU"
FROM
(
SELECT
"Uhrezeit" as "Start",
"Dauer" as "Dauer",
EXTRACT(HOUR from "Uhrezeit")+EXTRACT(HOUR from "Dauer") as "std",
EXTRACT(MINUTE from "Uhrezeit")+EXTRACT(MINUTE from "Dauer") as "min",
EXTRACT(SECOND from "Uhrezeit")+EXTRACT(SECOND from "Dauer") as "sek"
from "Tabelle1"
)
as "Zeit"
)
as "Zeit1"
[/code]
mit folgendem Ergebnis:
[attachment=0]zeit1.png[/attachment]
Gruß Barlee