2012-05-27 15 views
25

Ho bisogno di confrontare le date in MySQL ignorando la porzione di tempo in una colonna DateTime. Ho provato il seguente SQL.Confronto delle date in MySQL ignorando la porzione di tempo di un campo DateTime

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

E non recupera tutte le righe, anche se c'è una data 2012-05-03 10:16:46 nella tabella di MySQL. Come si può ignorare la parte relativa al tempo nel campo DateTime durante il confronto delle date in MySQL?

+0

qual è il tipo di dati di order_date? – Sebas

+0

È 'DateTime'. – Tiny

risposta

42

è possibile utilizzare la funzione DATE:

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

ma questo è più efficiente, se la tabella è grande e si dispone di un indice in order date:

SELECT col1, col2, ..., coln 
FROM order_table 
WHERE order_date >= '2012-05-03' 
AND order_date < '2012-05-04' 
2
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03'; 
+2

questo non può usare l'indice su 'order_date' – Marki555

5

Se si desidera per passare una data allora puoi provare qualcosa del genere:

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

È possibile guardare this per ulteriori funzioni.

2

Forse, è possibile utilizzare la funzione come date(). Ma in questo caso la velocità può essere ridotta, perché l'indice non può essere utilizzato. Quindi, vi consiglio di usare

SELECT * FROM order_table 
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59') 
2

@ Marco ha ottenuto il buon approccio, ma solo fare attenzione che si avrà sempre per il calcolo e trovare giorno dopo in quel caso. Se si desidera evitare ciò e ignorare il tempo che si potrebbe fare in seguito:

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

Spero che abbia senso.

0

una delle seguenti potrebbe essere utilizzato quando si confrontano le date in MySQL:

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

per più sulle funzioni di data MySQL documentation.

1

Questo è po 'vecchio .... ma una risposta corretta è anche utilizzando il date_format al order_date colonna come di seguito:

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

Nel mio caso ho avuto, DATE_FORMAT e CONVERT_TZ

L'unica uno ha funzionato per me è questo

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')