web-dev-qa-db-fra.com

Comparer des dates dans MySQL en ignorant la partie heure d'un champ DateTime

Je dois comparer les dates dans MySQL en ignorant la partie heure dans une colonne DateTime. J'ai essayé le SQL suivant.

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

Il ne récupère aucune ligne même s'il existe une date 2012-05-03 10:16:46 dans la table MySQL. Comment ignorer la portion de temps dans le champ DateTime lors de la comparaison de dates dans MySQL?

32
Tiny

Vous pouvez utiliser la fonction DATE :

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

Mais cela est plus efficace si votre table est grande et que vous avez un index sur order date:

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

Si vous souhaitez indiquer une date, vous pouvez essayer quelque chose comme ceci:

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

Vous pouvez regarder this pour plus de fonctions.

6
James Black

@Mark a la bonne approche, mais veillez à toujours calculer et trouver le lendemain dans ce cas. Si vous voulez éviter cela tout en ignorant le temps, vous pouvez procéder comme suit:

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

J'espère que cela a du sens.

3
deej

Peut-être que vous pouvez utiliser une fonction comme date() . Mais dans ce cas, la vitesse peut être réduite, car index ne peut pas utiliser. Donc, je recommande d'utiliser 

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

C'est un peu vieux .... mais une réponse correcte utilise également le date_format à la colonne order_date comme ci-dessous:

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

l’un des éléments suivants peut être utilisé lors de la comparaison de dates dans 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

pour en savoir plus sur les fonctions de date MySQL documentation .

0
Augustas

Dans mon cas, j'avais DATE_FORMAT et CONVERT_TZ

Le seul qui a fonctionné pour moi est-ce

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