Wie wähle ich Daten zwischen einem Datumsbereich in MySQL aus? Meine datetime
Kolumne ist im 24-Stunden-Zulu-Zeitformat.
select * from hockey_stats
where game_date between '11/3/2012 00:00:00' and '11/5/2012 23:59:00'
order by game_date desc;
Gibt trotz Daten zwischen diesen Zeiträumen nichts zurück. Muss ich die Werte in den Feldern 'von' und 'bis' zwingen, datetime
die Abfrage einzugeben?
game_date
?Antworten:
Sie müssen das Datumsformat aktualisieren:
select * from hockey_stats where game_date between '2012-03-11 00:00:00' and '2012-05-11 23:59:00' order by game_date desc;
quelle
where game_date >= '2012-03-11' and game_date < '2012-05-12'
ist die genaueste Methode zum Definieren eines Datumsbereichs und funktioniert für jede Zeitgenauigkeit von Datum bis zu Einheiten im Subsekundenbereich.Hier ist eine einfache Möglichkeit, die Datumsfunktion zu verwenden:
select * from hockey_stats where date(game_date) between date('2012-11-03') and date('2012-11-05') order by game_date desc
quelle
date(game_date)
Der Vergleich wird mit einem berechneten Wert und nicht mit einem Feld ausgeführt. Dies führt dazu , dass kein Index verwendet wird und jede einzelne Zeile berührt wird (dh ein vollständiger Tabellenscan).game_date
. Auch ohne Index müsste die Tabelle für einen spürbaren Leistungsunterschied mäßig groß sein. Etwas an dem Namenhockey_stats
deutet darauf hin, dass dies kein wirklich großer Tisch ist.Ein einfacher Weg:
select * from hockey_stats where game_date >= '2012-03-11' and game_date <= '2012-05-11'
quelle
Sie müssen wahrscheinlich die Funktion STR_TO_DATE verwenden:
select * from hockey_stats where game_date between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s') and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') order by game_date desc;
(Wenn game_date eine Zeichenfolge ist, müssen Sie möglicherweise STR_TO_DATE verwenden.)
quelle
Das MySQL-Datumsformat lautet wie folgt: YMD. Sie verwenden J / M / D. Das ist falsch Ändern Sie Ihre Abfrage.
Wenn Sie das Datum wie J / M / T einfügen, wird ein Nullwert in die Datenbank eingefügt.
Wenn Sie PHP verwenden und das Datum, das Sie aus dem Formular erhalten, wie folgt lautet: J / M / D, können Sie dies durch die Verwendung der Anweisung ersetzen.
quelle
Auf einfache Weise kann es als abgefragt werden
select * from hockey_stats where game_date between '2018-01-01' and '2018-01-31';
Dies funktioniert, wenn die Zeit keine Rolle spielt.
In Anbetracht der Zeit folgen Sie auch folgendermaßen:
select * from hockey_stats where (game_date between '2018-02-05 01:20:00' and '2018-02-05 03:50:00');
Beachten Sie, dass dies für den MySQL-Server gilt.
quelle
Sie können entweder die Funktion STR_TO_DATE verwenden und Ihre eigenen Datumsparameter basierend auf dem von Ihnen veröffentlichten Format übergeben:
select * from hockey_stats where game_date between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s') and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') order by game_date desc;
Oder verwenden Sie einfach das Format, in dem MySQL Datumsangaben verarbeitet. JJJJ: MM: TT HH: mm: SS und haben Sie die Abfrage als
select * from hockey_stats where game_date between '2012-03-11 00:00:00' and'2012-05-11 23:59:00' order by game_date desc;
quelle
Sie müssen das Datum verteidigen, um zu bestimmen, wie Sie diese game_date-Daten in Ihre Datenbank einfügen. Wenn Sie beispielsweise einen Datumswert für ein langes oder ein kurzes Datum eingegeben haben.
SELECT * FROM hockey_stats WHERE game_date >= "6/11/2018" AND game_date <= "6/17/2018"
Sie können auch ZWISCHEN :
SELECT * FROM hockey_stats WHERE game_date BETWEEN "6/11/2018" AND "6/17/2018"
so einfach ist das.
quelle