Zum Inhalt springen

Floatzahl zu Zeit konvertieren?


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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. ;):)

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...