Ich habe eine Tabelle mit 2 'datetime' Feldern: 'eventDate' und 'eventHour'. Ich versuche, nach "eventDate" und dann nach "eventHour" zu bestellen.
Für jedes Datum werde ich eine Liste von Ereignissen haben, deshalb werde ich nach Datum und dann nach Zeit sortieren.
Danke !!
Ich bin mir nicht sicher, ob es irgendeine versteckte Bedeutung in Ihrer Frage gibt, aber die übliche Art, dies zu tun, scheint zu passen:
%Vor%Das gibt Ihnen Stunden innerhalb von Daten wie:
%Vor% Wenn Sie diese beiden Felder tatsächlich als real datetime
Felder haben, ist Ihr Schema vermasselt. Sie sollten ein date
-Feld für das Datum und ein time
oder ein integrales Feld für die Stunde haben.
Sie könnten beide zu einem einzigen datetime
-Feld zusammenfassen, aber Sie sollten dies gegen die Ineffizienzen der Ausführung von Funktionen pro Zeile in Ihren select
-Anweisungen abwägen, wenn Sie sie trennen möchten. Es ist normalerweise besser, Felder getrennt zu halten, wenn Sie sie deutlich verwenden.
Wenn Sie tun müssen Zeilenfunktionen verwenden, können Sie verwenden:
%Vor%, um nur die Komponenten date
und time
eines datetime
zu extrahieren.
Wenn Sie die Daten zuerst als letztes Ereignisdatum auflisten möchten, wenn Datensätze desselben Datums vorhanden sind Daten werden nach Zeit sortiert, dh die späteste Zeit zuerst,
Sie können es wie folgt versuchen
%Vor% Warum speichern Sie nicht sowohl eventDate
als auch eventHour
im selben Feld, wenn beide DateTime
sind?
Um zu bekommen, was Sie mit dem aktuellen Schema wollen, können Sie dies tun:
%Vor%Sie können beliebig viele Bestellungen aufgeben, verwenden Sie einfach eine Liste. Es wird nach dem ersten Wert sortiert, dann nach dem zweiten ... usw.
%Vor%Wenn Sie zwei Datetime-Felder haben, können Sie nur das Datum oder nur die Stunde mit etwas wie:
abrufen %Vor%Erstens ist es eine schlechte Übung, Datum und Uhrzeit in verschiedenen Feldern zu speichern.
Jedenfalls vorausgesetzt, Sie speichern Datum / Uhrzeit im richtigen Format. (d. h. das Datumsformat ist JJJJ-MM-TT und die Zeit ist HH: SS)
Sie müssen zuerst das Datum und die Uhrzeit verketten, um einen Datetime-Wert zu erhalten. Technisch gesehen können Sie ORDER BY ON auf einem Datetime-Feld ausführen, aber es ist nicht wieder eine gute Übung. In unserem Fall, wenn wir CONCAT ausführen, wird dies in eine Zeichenfolge konvertiert, so dass die Ergebnismenge falsch ist. Sie müssen es also in einen UNIX TIMESTAMP konvertieren, um eine Bestellung durchzuführen.
Es empfiehlt sich, ein UNIX_TIMESTAMP für ein Datetime-Feld vor einer ORDER by-Klausel auszuführen.
Sie können die folgende Abfrage verwenden.
SELECT spalte1, spalte2, UNIX_TIMESTAMP (CONCAT ( event_date
, '', event_time
)) als unixtimestamp
aus Tabellenname
Bestellung von unixtimestamp desc;
Hinweis: (In der CONCAT-Funktion gibt es ein Leerzeichen zwischen event_date und event_time. Es wird hier nicht korrekt angezeigt.)
Dies ist der beste Weg, der für mich funktioniert hat, einfach das Datum in Tage mit der Funktion bis (Datum) und die Zeit in die Anzahl der Sekunden mit der Funktion TIME_TO_SEC (Zeit) umwandeln , Beispiel:
%Vor%Esta es la mejor forma que funcionó para mí, sólo convertir la fecha al numero de días con la función TO_DAYS (fecha) y el tiempo a la cantadid de segundos con la funcion TIME_TO_SEC (tiempo)
%Vor%Tags und Links datetime mysql sql-order-by