Juha: SQL-Befehl

Hallo miteinander

Ich habe eine kleine Frage betreffend SQL-Befehle

In einer bestehenden Tabelle (hat noch keine Einträge) würde ich gerne den Datentyp TIME so definieren, dass man über hundert stunden eingeben kann (z.B. 178:35:00), wie ist das möglich?

Grüsse Juha

  1. Hi Juha,

    Ich denke nicht dass das geht, da der datatype Time doch die Uhrzeit meint. Logischerweise sollte es daher nicht ueber 23:59:59 oder so gehen, daher ist es wohl nicht der geeignete datatype.

    Gruss, Mel

    Hallo miteinander

    Ich habe eine kleine Frage betreffend SQL-Befehle

    In einer bestehenden Tabelle (hat noch keine Einträge) würde ich gerne den Datentyp TIME so definieren, dass man über hundert stunden eingeben kann (z.B. 178:35:00), wie ist das möglich?

    Grüsse Juha

    1. Hi Juha,

      Ich denke nicht dass das geht, da der datatype Time doch die Uhrzeit meint. Logischerweise sollte es daher nicht ueber 23:59:59 oder so gehen, daher ist es wohl nicht der geeignete datatype.

      Gruss, Mel

      Danke Mel

      Gibt es hier eine andere Lösung? Oder muss ich einen anderen Datentyp nehmen, mein Problem ist, dieser wert wird mit anderen TIME spalten verglichen?

      z.B. möchte ich von diesen 178,35 Stunden 08:35:18 abziehen, wie kann ich dies lösen?

      Das Minusrechnen dieser Stunden wird in einem Perl-Programm behandelt.

      grüsse juha

      1. Oh je, das wird etwas komplizierter. Mir faellt da erstmal nur folgendes ein:

        Als datatype fuer die zB 178,35 h waere ein int wohl geeignet, damit laesst sich auch rechnen. Dann muesstest Du erstmal die Uhrzeit aus der TIME spalte umrechnen in einen integer. Also, aus 8:35:18 erstmal die Stunden rausziehen, damit hast Du die Stelle vor dem Komma. Dann die Minuten umrechnen, dh. 35/60 = 0.58. Das dazuaddieren, ergibt 8,58 h. Das kann dann abgezogen werden von den 178.35 h.

        Hoffe das bringt dich etwas weiter.

        Gruss, Mel

        Danke Mel

        Gibt es hier eine andere Lösung? Oder muss ich einen anderen Datentyp nehmen, mein Problem ist, dieser wert wird mit anderen TIME spalten verglichen?

        z.B. möchte ich von diesen 178,35 Stunden 08:35:18 abziehen, wie kann ich dies lösen?

        Das Minusrechnen dieser Stunden wird in einem Perl-Programm behandelt.

        grüsse juha

        1. Moin!

          Als datatype fuer die zB 178,35 h waere ein int wohl geeignet, damit laesst sich auch rechnen. Dann muesstest Du erstmal die Uhrzeit aus der TIME spalte umrechnen in einen integer. Also, aus 8:35:18 erstmal die Stunden rausziehen, damit hast Du die Stelle vor dem Komma. Dann die Minuten umrechnen, dh. 35/60 = 0.58. Das dazuaddieren, ergibt 8,58 h. Das kann dann abgezogen werden von den 178.35 h.

          Integer sind per Definition eigentlich Ganzzahlen, haben also keine Nachkommastellen, oder?

          Aber das macht auch garnichts, denn ich würde die Stunden:Minuten:Sekunden einfach in Sekunden umrechnen und als Ganzzahl speichern. Der mögliche Zeitraum reicht locker bis nächstes Jahr Weihnachten, und noch darüber hinaus.

          Wenns noch genauer sein soll: Natürlich gehen auch Zehntel-, Hunderstel-, oder Tausendstelsekunden. Irgendwann spielt dir aber die reale Welt einen Streich, denn irgendwo im Bereich Femto-Sekunden (oder so) wird die Zeit unscharf und kann nicht mehr genau gemessen werden. ;o)

          Ach ja: Mit Sekunden kann man natürlich auch prima rechnen, sie addieren oder subtrahieren, ohne irgendwelche komplizierten Rechenschritte vollführen zu müssen. Lediglich wenn man wieder das Format hh:mm:ss haben will, muß man die Sekunden umrechnen. Wie, sollte eigentlich keine schwierige Aufgabe sein.

          - Sven Rautenberg

          1. Huestel, da haste recht, Sven!
            Hab eigentlich Float gemeint, aber mit den Sekunden ist es schlauer.

            Gruss, Mel

            Moin!

            Als datatype fuer die zB 178,35 h waere ein int wohl geeignet, damit laesst sich auch rechnen. Dann muesstest Du erstmal die Uhrzeit aus der TIME spalte umrechnen in einen integer. Also, aus 8:35:18 erstmal die Stunden rausziehen, damit hast Du die Stelle vor dem Komma. Dann die Minuten umrechnen, dh. 35/60 = 0.58. Das dazuaddieren, ergibt 8,58 h. Das kann dann abgezogen werden von den 178.35 h.

            Integer sind per Definition eigentlich Ganzzahlen, haben also keine Nachkommastellen, oder?

            Aber das macht auch garnichts, denn ich würde die Stunden:Minuten:Sekunden einfach in Sekunden umrechnen und als Ganzzahl speichern. Der mögliche Zeitraum reicht locker bis nächstes Jahr Weihnachten, und noch darüber hinaus.

            Wenns noch genauer sein soll: Natürlich gehen auch Zehntel-, Hunderstel-, oder Tausendstelsekunden. Irgendwann spielt dir aber die reale Welt einen Streich, denn irgendwo im Bereich Femto-Sekunden (oder so) wird die Zeit unscharf und kann nicht mehr genau gemessen werden. ;o)

            Ach ja: Mit Sekunden kann man natürlich auch prima rechnen, sie addieren oder subtrahieren, ohne irgendwelche komplizierten Rechenschritte vollführen zu müssen. Lediglich wenn man wieder das Format hh:mm:ss haben will, muß man die Sekunden umrechnen. Wie, sollte eigentlich keine schwierige Aufgabe sein.

            • Sven Rautenberg
  2. Hi,

    In einer bestehenden Tabelle (hat noch keine Einträge) würde ich gerne den Datentyp TIME so definieren, dass man über hundert stunden eingeben kann (z.B. 178:35:00), wie ist das möglich?

    Ist es.

    Auszug aus der MySQL-Doku:

    MySQL retrieves and displays TIME values in 'HH:MM:SS' format (or 'HHH:MM:SS' format for large hours values). TIME values may range from '-838:59:59' to '838:59:59'. The reason the hours part may be so large is that the TIME type may be used not only to represent a time of day (which must be less than 24 hours), but also elapsed time or a time interval between two events (which may be much greater than 24 hours, or even negative).

    Sollte somit kein Problem darstellen, wenn der Wert nicht über 838 h und ein paar zerquetschte geht. Wenn doch:

    Values that lie outside the TIME range but are otherwise legal are clipped to the appropriate endpoint of the range. For example, '-850:00:00' and '850:00:00' are converted to '-838:59:59' and '838:59:59'.

    Hoffe, das war, was du gesucht hast.

    Liebe Gruesse aus Österreich
    Martin

    1. Auszug aus der MySQL-Doku:

      -> http://www.mysql.com/doc/T/I/TIME.html