Zum Inhalt springen

Floatzahl zu Zeit konvertieren?


SNOWMAN

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...