Announcement

Collapse
No announcement yet.

Kann InterBase nicht Rechnen

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

  • Kann InterBase nicht Rechnen

    Hallo zusammen,
    <p>Ich kann machen was ich will die Rechnung stimmt nicht.<br>
    Gegeben ist eine Tabelle mit Werten für Stunden, Minuten (SMALLINT) die in Industrie Stunden berechnet werden sollen, Feld_1 ist irgend ein VARCHAR, nach dem Gruppiert wird (Wer Arbeitet am meisten ;-)<br>
    also:</p>

    Stunde * 60 + Minuten = Gesamt Minuten<br>
    Gesamt Minuten / 60 = Industrie Stunde<br>

    <p>SELECT FELD_1, SUM(((STUNDE * 60)+ MINUTEN)/60) FROM TABLE
    GROUP BY FELD_1</p>
    oder
    <p>SELECT FELD_1, SUM(CAST(((STUNDE * 60)+ MINUTEN)/60 as FLOAT)) FROM TABLE
    GROUP BY FELD_1</p>
    oder
    <p>SELECT FELD_1, SUM((MINUTEN + STUNDEN * 60)/60)
    FROM TABLE
    GROUP BY FELD_1</p>
    oder , oder …..
    <p>Das Ergebnis ist immer falsch.</p>
    IB OpenSource 6.x
    <p>Gruß Andreas</p>

  • #2
    Hallo Andreas,<br><br>
    Du dividierst mit 60 und dies betrachtet InterBase als einen ganzzahligen Wert, somit ist das Ergebnis der Division wieder ein ganzzahliger Wert. Deine Idee mit dem CAST im 2. Statement war der richtige Weg, allerdings castest Du das Endergebnis, und nicht den Wert 60 für die Division. Du hast im wesentlichen zwei Möglichkeiten.<br><br>
    Willst Du ein Endergebnis mit einer fixen Anzahl von Nachkommastellen, dann gib für den Nenner der Division die Anzahl der Nachkommastellen an. z.B. für 3 Nachkommastellen:<br><br>
    SELECT FELD_1, SUM(((STUNDE * 60)+ MINUTEN)/60.000) FROM TABLE GROUP BY FELD_1<br><br>
    Genauere Ergebnisse bekommst Du allerdings, wenn Du den Wert 60 mit FLOAT oder DOUBLE PRECISION castest. z.B.:<br><br>
    SELECT FELD_1, SUM(((STUNDE * 60)+ MINUTEN)/CAST(60 AS DOUBLE PRECISION)) FROM TABLE GROUP BY FELD_1<br><br>
    Gruss,<br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Danke Thomas, bin heute Morgen auch dahinter gekommen. InterBase ist eben doch klasse ;-

      Comment

      Working...
      X