Veröffentlicht 18. Oktober 200420 j Hi, hab n einfachen Select der zwei Uhrzeiten voneinander abzieht. Das Prob ist, das Ergebnis dieser Rechnung is ne Floatzahl, ich hätte aber lieber ne Uhrzeit, sicher könnt ich Excel die Arbeit übernehmen lassen, aber das is ja nich Zweck der Aufgabe, soll ja was lernen, daher wüsst ich gern ne lösung dafür. select vstart, to_char(vstart, 'hh24:mi:ss') Beginn, to_char(vende, 'hh24:mi:ss')Ende, vende - vstart, ... vende und vstart sind komplette DATE-Felder vstart-vende liefert mir nen Floatwert a la 0,00130787037037037 was dann 00:01:53 als Zeit darstellt (laut excel) Mach ich to_date(vende - vstart, 'hh24:mi:ss') sagt er: ORA-01858: a non-numeric character was found where a numeric was expected
19. Oktober 200420 j Hi, SNOWMAN! Nun, wenn Du etwas lernen sollst, dann lerne: Du weißt, wie 18:00Uhr dezimal dargestellt wird? --> 0,75 Dann weißt Du, wie 06:00Uhr dargestellt wird: --> 0,25 12:00Uhr ist dann folgerichtig = 0,5. Heißt: Jede Uhrzeit eines Tages kann dezimal im Intervall [0; 1[ dargestellt werden. (23:59:59 = 0,999988425925926) Wie wird gerechnet? Um zu ermitteln, wie der Dezimalwert (Dw) für z.B. x-Uhr (Runde Stunden ohne Minuten: xStd) ist, wird die Formel Dw = 1 / 24 * xStd verwendet. Beispiel: Gegeben: 21 Stunden (xStd) Gesucht: Dezimalwert (Dw) Dw = 1 / 24 * 21 (= 1 / 4 * 3 = 3 / 4) = 0,75 --> Dezimalwert = 0,75 Mit ein wenig umstellen kann aus dem gegebenen Dezimalwert die Stunden (xStd) ermitteln: xStd = 24 * Dw Beispiel: Gegeben: 0,75 (Dw) Gesucht: Stunden (xStd) xStd = 0,75 * 24 = 6 --> 6 Stunden Wie die Minuten zu berechnen sind? Das überlasse ich Dir.
19. Oktober 200420 j Oder du nimmst die Funktion to_dsintervall (funktioniert so nur wenn du dich innerhalb eines Tages bewegst.... Folgende Funktion gibt die Zeit seit 00:00:00 Uhr an... (Ich weiß das kann man auch einfacher haben, aber ich habe das so getestet da ich keine Tabelle aufbauen wollte mit Testdaten...) select to_char(trunc(sysdate) + TO_DSINTERVAL('0 '|| to_char(sysdate,' hh24:mi:ss')) ,'hh24:mi:ss') from dual; Für deinen Fall müsste das dann ungefähr folgendermassen aussehen...: select vstart, to_char(vstart, 'hh24:mi:ss') Beginn, to_char(vende, 'hh24:mi:ss')Ende, to_char(vende - TO_DSINTERVAL('0 '|| to_char(vstart,' hh24:mi:ss')) ,'hh24:mi:ss') from .... Schöne Grüße.... mme
22. Oktober 200420 j cool, danke für die gute erklärung!!!!!!! das werd ich gleich mal in meine sql dokumentation übernehmen hat auch super funktioniert!
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.