Unixtimestamp in MySQL umformatieren

Diskutiere mit über: Unixtimestamp in MySQL umformatieren im Datenbanksysteme für das Web Forum

  1. chrigu

    chrigu Thread Starter MacUser Mitglied

    Beiträge:
    155
    Zustimmungen:
    0
    Registriert seit:
    08.03.2004
    Hallo,

    Ich habe in einer Tabelle Spalten definiert, die mit einem Datum 'YYYY-MM-DD' (Datentyp: date) und Zeitangabe 'HH-MM-SS' (Datentyp: time) versehen sind.

    Nun möchte ich die Einträge/Zeilen auslesen und zwar solche die sich innerhalb eines definierten Datums befinden. Bei den betreffenden Zeilen soll das Gesamttotal der Zeitangabe berrechnet werden. Dazu habe ich folgenden SQL Befehl geschrieben:

    PHP:
    SELECT SUM(`Zeitangabe`) FROM `TabelleWHERE `DatumBETWEEN '2004-10-25' AND '2004-10-29' LIMIT 1
    Nun bekomme ich eine mehrstellige Zahl. Ich nehme an, dass es sich um den Unixtimestamp handelt. Wie kann ich den nun umformatieren, das wieder eine Zeitangabe HH-MM-SS entsteht. Zum Beispiel 68:50:00.

    Gruess Chrigu
     
  2. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.034
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    Hm!? Ob es das ist, was Du suchst?

    select time_format(sum(datum),'%H:%i:%s')

    in obige AAnweisung, brächte das Ergebnis, ABER: Die datumsangaben werden in mysql intern einfach nur als Zahlen (timestmp ähnlich) gespeichert. Du summierst also auch die Jahre, Tage Monate und die Uhrzeit auf, respektive deren Entsprechung als Integer! Ob das Ergebnis überhaupt stimmig ist wage ich zu bezweifeln.
    Wenn Du aufgewendete Zeiten haben möchtest, würde ich ggf. anders speichern. Ich mache hier mit einem Webserver Statistiken über eine Firmen-TK-Anlage und speichere z.B. Gesprächsdauer geziehlt als int über minuten! Du kannst nat auch als datetime speichern und dann per date_format(datum,'%H:%i:%s') daraus nur die Zeit ausschneiden, aber solche Konvertierungen kosten Zeit. Da man meist mehr liest als schreibt, bietet es sich an, so in die DB zu schreiben, wie Du auslesen willst.
     
  3. chrigu

    chrigu Thread Starter MacUser Mitglied

    Beiträge:
    155
    Zustimmungen:
    0
    Registriert seit:
    08.03.2004
    Uups, theoretisch wäre TIME_FORMAT(SUM(time), '%H:%i:%s') schon das gesuchte gewesen, wenn denn das Datenfeld Time als solches summiert würde und nicht als "Entsprechung im Integer" Grmpf…

    Dachte beim erstellen der Datenbank, ich definiere ein Zeitformat als Time damit ich dann per MySQL komfortabel Zeiten zusammen zählen kann, daraus wird wohl nichts, oder?

    Die Datenfelder will ich nicht mehr umwandeln, weil bereits seit langem erstellt und ich viel ändern müsste. Es bleibt mir wohl nichts mehr anderes übrig als in PHP das Ergebnis in ein Array zu laden und mit schleife zu konvertieren und zusammen zu zählen.
     
  4. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.034
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    ich habe das jetzt nicht im einzelnen getestet, ob das in mysql ein echter timestamp ist, dann kannst Du ja ggf. damit rechnen, mußt Du halt mal probieren. Wenn Du das häufig brauchst, würd ich das Design erweitern. Füg eine Spalte

    delta_zeit unsigned int

    hinzu und berechne einmalig alle delta_zeit-Werte. Zukünftig trägst Du die Zeit dann dort umgerechnet in ganze Minuetn oder Sekunden ein. et voila!
     
  5. Nogger

    Nogger MacUser Mitglied

    Beiträge:
    367
    Zustimmungen:
    0
    Registriert seit:
    03.08.2004
  6. chrigu

    chrigu Thread Starter MacUser Mitglied

    Beiträge:
    155
    Zustimmungen:
    0
    Registriert seit:
    08.03.2004
    Danke euch fürs weiterhelfen, zum Glück führen immer verschiedene Wege zum Ziel.

    Ich kenne zwar den Unterschied zwischen den verschiedenen Timestamps nicht, aber es war tatsächlich so, dass die Summe eine falsche Zeit lieferte.

    MySQL kennt scheinbar wenigstens eine Time to sec Funktion, in PHP musste ich mir die selber schreiben, die Schleife ist mir aber nun doch erspart worden :).
     
  7. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.034
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    Denk aber daran, daß nur mysql das so in der Art macht! Ich verwende so etwas nur im Notfall, weil es eben nicht portabel ist!
     
  8. chrigu

    chrigu Thread Starter MacUser Mitglied

    Beiträge:
    155
    Zustimmungen:
    0
    Registriert seit:
    08.03.2004
    Ok, ich hab mich doch ein bisschen zu früh gefreut :-( , weil folgender MySQL Befehl Ergebnis NULL liefert:

    "SELECT SUM(TIME_TO_SEC(`Zeitangabe`)) FROM `Tabelle` WHERE 'Datum' BETWEEN '2004-10-26' AND '2004-10-29'"

    Hingegen funktioniert das Ganze ohne Bedingung, also so:

    "SELECT SUM(TIME_TO_SEC(`Zeitangabe`)) FROM `Tabelle`"

    und liefert ein korrektes Ergebnis der Summe in Sekunden. Es scheint also noch an der Bedingung zu liegen, die Daten zwischen dem 2004-10-26 und dem 2004-10-29 existieren in der enstprechenden Spalte 'Datum', womit ich mich langsam Frage, ob MySQL überhaupt ein Datum mit einem anderen so vergleichen kann.
     
  9. chrigu

    chrigu Thread Starter MacUser Mitglied

    Beiträge:
    155
    Zustimmungen:
    0
    Registriert seit:
    08.03.2004
    Gut, hab den Fehler gefunden. Ich hatte die falschen Anführungszeichen bei `Datum` verwendet. Nun funktionierts definitiv :)
     
Die Seite wird geladen...
Ähnliche Themen - Unixtimestamp MySQL umformatieren Forum Datum
Mysql - Duplicates abfangen, mit php oder mit unique keys? Datenbanksysteme für das Web 08.03.2016
mysql abfrage optimieren Datenbanksysteme für das Web 26.03.2014
php - mysql_error != mysqli_error - mysql meldet Fehler, mysqli nicht Datenbanksysteme für das Web 05.07.2013
Fragen & Hilfe zu Projekt mit php & mySQL Integration Datenbanksysteme für das Web 01.07.2013
Fragen zu MySql Datenbanksysteme für das Web 04.03.2013

Diese Seite empfehlen

Benutzerdefinierte Suche