SQL Durchschnittliche Zeit von timestamp als string gespeichert
Ich habe zwei Spalten namens date
und starthour
in einer Microsoft SQL Server-Tabelle.
Beide Spalten char; einem Anderen Mann machen und ich weiß nicht, warum es gebaut wurde, auf diese Weise. 🙂
date starthour
20/01/2011 8:10:00
20/01/2011 8:20:00
20/01/2011 8:30:00
20/01/2011 8:40:00
21/01/2011 8:10:00
21/01/2011 8:20:00
21/01/2011 8:30:00
Ich möchte, um zu bestimmen, die Durchschnittliche starthour
für jedes Datum.
date starthour
20/01/2011 8:25:00
21/01/2011 8:20:00
Ich habe versucht, die folgenden:
SELECT date, Avg(cast(starhour as datetime())) AS starhour
FROM table
GROUP BY date
aber es funktioniert nicht.
- Die Antwort kann abhängen, auf welche Datenbank-engine, die Sie verwenden. Könnten Sie Ihre Frage aktualisieren, das zu erwähnen? Auch, es sieht aus wie Ihre starthour Spalte ist die ZEIT eher als ein DATETIME-Wert, da es sich nicht um ein Datum-Komponente.
- Ich bin mit SQL-server, wirklich starthour ist nur ein char.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lasst uns nicht um den heißen Brei herumreden: sollte man sich dieses schema so bald wie möglich.
In der Zwischenzeit, wird dies den richtigen Wert zurück.
Demo auf SQLFiddle
Nicht speichern Daten, datetimes oder Zeitstempel varchar. Beispielsweise hat MySQL native Typen für alle drei dieser Typen, die garantiert, dass Sie nicht mit ungültigen Daten, die in Ihnen ist, und dass MySQL wissen, wie Sie zu behandeln: http://dev.mysql.com/doc/refman/5.1/en/datetime.html
Was Sie tun sollten, ist ein einzelnes Feld,
date
, das ist dertimestamp
geben, enthält sowohl das Datum und die Uhrzeit. Sollten Sie überarbeiten Sie Ihre Datenbank und übertragen Sie alle Ihre Daten auf das neue format durch Gießen, so dass Sie nie sorgen zu machen, über wieder.Danach, was Sie tun müssen, unterscheidet sich basierend auf dem SQL-Geschmack. Zum Beispiel, diese Antwort wird für MySQL, aber jeder Geschmack ist anders datetime-Funktionen (leider!).
MySQL-datetime-Funktionen sind http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
Ungetestet, aber so etwas wie:
GROUP BY EXTRACT(day from date)
AVG(EXTRACT(hour from date)*60 + EXTRACT(minute from date))