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?
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'
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.
@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.
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')
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
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';
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 .
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')