web-dev-qa-db-de.com

Beim Vergleichen von Datumsangaben in MySQL wird der Zeitabschnitt eines DateTime-Felds ignoriert

Ich muss Datumsangaben in MySQL vergleichen und den Zeitanteil in einer DateTime-Spalte ignorieren. Ich habe folgende SQL ausprobiert.

SELECT * FROM order_table where order_date=date_format('2012-05-03', '%Y-%m-%d');

Es ruft keine Zeile ab, obwohl in der MySQL-Tabelle ein Datum 2012-05-03 10:16:46 vorhanden ist. Wie kann der Zeitanteil im Feld DateTime beim Vergleich von Datumsangaben in MySQL ignoriert werden?

32
Tiny

Sie können die Funktion DATE verwenden:

SELECT col1, col2, ..., coln
FROM order_table
WHERE date(order_date) = '2012-05-03'

Dies ist jedoch effizienter, wenn Ihre Tabelle groß ist und Sie einen Index für order date haben:

SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-03'
AND order_date < '2012-05-04'
53
Mark Byers

Wenn Sie ein Datum übergeben möchten, können Sie Folgendes versuchen:

where YEAR(order_date)='2012' AND MONTH(order_date)='05' AND DAY(order_date)='03'

Sie können unter this nach weiteren Funktionen suchen.

6
James Black

@ Mark hat den guten Ansatz, aber seien Sie vorsichtig, dass Sie in diesem Fall immer den nächsten Tag berechnen müssen. Wenn Sie das vermeiden möchten und trotzdem die Zeit ignorieren, können Sie Folgendes tun:

WHERE order_date >= '2012-05-27 00:00:00' AND order_date <= '2012-05-27 23:59:59'

Ich hoffe das macht Sinn.

3
deej

Vielleicht können Sie eine Funktion wie date() verwenden. In diesem Fall kann jedoch die Geschwindigkeit verringert werden, da der Index nicht verwendet werden kann. Also empfehle ich zu verwenden 

SELECT * FROM order_table 
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59')
2
Kostia Shiian
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
2
lanzz

Dies ist ein bisschen alt, aber eine korrekte Antwort verwendet auch das date_format in der Spalte order_date wie folgt:

SELECT * FROM order_table where date_format(order_date, '%Y-%m-%d')='2012-05-03';
1
Erevodifosin

beim Vergleichen von Daten in MySQL kann eine der folgenden Methoden verwendet werden:

DATEDIFF() Subtract two dates
TIMEDIFF() Subtract time
TIMESTAMPDIFF() Subtract an interval from a datetime expression
PERIOD_DIFF()   Return the number of months between periods

weitere Informationen zu Datumsfunktionen MySQL Dokumentation .

0
Augustas

In meinem Fall hatte ich DATE_FORMAT und CONVERT_TZ

Der einzige, der für mich gearbeitet hat, ist dies

DATE_FORMAT(CONVERT_TZ(`order_item`.created, '+0:00', '+2:00'), '%d/%m/%Y %H:%i') 

BETWEEN 
('12/02/2018 01:42') 
AND 
('12/02/2018 10:51')
0
shareef