50

我需要比较 MySQL 中的日期,忽略DateTime列中的时间部分。我已经尝试了以下 SQL。

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

即使2012-05-03 10:16:46MySQL 表中有日期,它也不会检索任何行。DateTime在比较 MySQL 中的日期时,如何忽略字段中的时间部分?

4

8 回答 8

83

您可以使用以下DATE功能:

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

但这更有效,如果您的表很大并且您有一个索引order date

SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-03'
AND order_date < '2012-05-04'
于 2012-05-27T19:12:36.270 回答
8

如果你想传递一个日期,那么你可以尝试这样的事情:

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

您可以查看以获取更多功能。

于 2012-05-27T19:17:10.520 回答
5

@Mark 有一个很好的方法,但要小心,在这种情况下,你总是必须在第二天计算和找到。如果您想避免这种情况并且仍然忽略时间,您可以执行以下操作:

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

我希望这是有道理的。

于 2012-05-27T19:51:09.807 回答
4
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
于 2012-05-27T19:13:10.353 回答
2

也许,您可以使用类似date(). 但是在这种情况下速度可以降低,因为索引不能被使用。所以,我建议使用

SELECT * FROM order_table 
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59')
于 2012-05-27T19:20:16.260 回答
2

这有点老了....但正确的答案也是在 order_date 列中使用 date_format,如下所示:

SELECT * FROM order_table where date_format(order_date, '%Y-%m-%d')='2012-05-03';
于 2017-06-22T12:15:08.283 回答
0

就我而言,我有,DATE_FORMAT并且CONVERT_TZ

唯一对我有用的是这个

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')
于 2018-02-21T16:54:30.907 回答
0

在 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

有关日期函数的更多信息 MySQL文档

于 2016-09-21T11:12:49.367 回答