Announcement

Collapse
No announcement yet.

Real in Zeit umwandeln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Real in Zeit umwandeln

    Hi,

    ich habe in meiner Datenbank (SQL 2005 Express) eine Spalte in welcher z.b. folgender Wert steht: 1,3

    Das heißt, 1 Stunde und 30 Minuten.
    Jetzt habe ich aber das Problem, dass ich nun eine Spalte von der anderen abziehen möchte...

    z.B. 17 - 1,3 (17 Stunden - 1 Stunde 30 Minuten

    Ergibt 16,7 - es sollte jedoch 16,3 (16 Stunden 30 Minuten) herauskommen, da ich ja sonst flasch rechne... Gibt es dafür eine Möglichkeit, diese Zaheln in der von mir gewünschten Art zu berechnen?

    MfG schnurzli

  • #2
    Hallo schnurzli,

    das ist mit Abstand die merkwürdigste Art & Weise die ich gesehen habe, um einen Zeitwert als Zahl darzustellen.
    Normalerweise ist 1:30 h = 1,5

    Dein Problem ist nun, das Du die Nachkommastelle immer erst ins Dezimalsystem umrechnen muss (damit rechnet übrigens der gesamte Rest der Welt).

    Hier ein kleiner Ansatz für Dich

    [highlight=sql]
    DECLARE @Zeit1 as float
    DECLARE @Zeit2 as float
    DECLARE @Diff as float

    SET @Zeit1 = 17.0
    SET @Zeit2 = 1.3

    SET @Diff = (floor(@Zeit1) + 10.0 * (@Zeit1 - floor(@Zeit1)) / 6.0)
    -(floor(@Zeit2) + 10.0 * (@Zeit2 - floor(@Zeit2)) / 6.0)
    SELECT @Diff
    SELECT Floor(@Diff) + (6.0 * (@Diff - floor(@Diff)) / 10)
    [/highlight]

    Wobei es natürlich sinnvoll & einfacher wäre, die Umrechung in eine Funktion zu verpacken.

    Olaf

    P.S.: 17 - 1,3 (Alias 1,5) ergibt 15, 7 nicht 16,7 oder ist die Vorkommazahl auch in einem anderen Zahlsystem?

    T'schuldige mein lästern, ist nicht bös gemeint.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      hi,

      der ansatz funktioniert ganz gut- jetzt bin ich aber auf ein kleines problem gestossen.

      wenn ich z.b.:

      Code:
      SET @Zeit1 = 32.3
      SET @Zeit2 = 1.3
      verwende, kommt mir am ende 30,6 heraus...
      Bei anderen Werten funktioniert es wieder. Habe die Formel auch auf dem Papier nachgerechnet, aber da kommt 30 heraus. ist das ein rundungsfehler der funktion floor?

      Comment


      • #4
        Hallo schnurzli,

        fast ... mehr an der Ungenauigkeit von FLOAT; es kommt nämlich 30,9999... raus und das entspricht halt 30,6.

        Ändere es mal wie folgt:
        SET @Diff = convert(money, (floor(@Zeit1) + 10.0 * (@Zeit1 - floor(@Zeit1)) / 6.0) - (floor(@Zeit2) + 10.0 * (@Zeit2 - floor(@Zeit2)) / 6.0))

        Alternative kannst Du auch in einen anderen Datentypen casten.

        Olaf
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          danke! damit hats hingehauen....

          herzlichen dank!

          Comment

          Working...
          X