2012-05-27 19 views
25

Necesito comparar las fechas en MySQL ignorando la porción de tiempo en una columna DateTime. He intentado el siguiente SQL.Comparación de fechas en MySQL ignorando la parte del tiempo de un campo DateTime

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

No recupera cualquier fila a pesar de que hay una fecha 2012-05-03 10:16:46 en la tabla de MySQL. ¿Cómo se puede ignorar la porción de tiempo en el campo DateTime al comparar fechas en MySQL?

+0

¿Cuál es el tipo de datos de order_date? – Sebas

+0

Es 'DateTime'. – Tiny

Respuesta

42

usted podría utilizar la función DATE:

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

pero esto es más eficiente, si la tabla es grande y tiene un índice en 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

esto no puede usar el índice en 'order_date' – Marki555

5

Si quieren para pasar una fecha, entonces puede intentar algo como esto:

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

Puede mirar this para más funciones.

2

Tal vez, puede usar la función como date(). Pero en este caso, la velocidad se puede reducir, porque el índice no se puede usar. Por lo tanto, se recomienda utilizar el

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

@ Marcos tiene el buen enfoque, pero sólo tenga cuidado de que siempre tendrá que calcular y encontrar al día siguiente en ese caso. Si se quiere evitar eso y todavía ignora el tiempo que podría hacer lo siguiente:

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

Espero que esto tenga sentido.

0

uno de los siguientes podrían ser utilizados cuando se comparan las fechas en 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 

para más información sobre las funciones de fecha MySQL documentation.

1

Esto es poco viejo .... pero una respuesta correcta es también el uso de la date_format en el order_date la columna, como a continuación:

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

En mi caso tuve, DATE_FORMAT y CONVERT_TZ

El único uno funcionó para mí es este

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