比较MySQL中的日期,忽略DateTime字段的时间部分

时间:2012-05-27 19:10:23

标签: mysql date datetime date-comparison

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

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

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

8 个答案:

答案 0 :(得分:55)

您可以使用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'

答案 1 :(得分:8)

如果您想传递约会,那么您可以尝试这样的事情:

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

您可以查看this了解更多功能。

答案 2 :(得分:3)

@Mark已经有了很好的方法但是要小心你总是必须计算并在那种情况下找到第二天。如果你想避免这种情况,仍然会忽略你可以遵循的时间:

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

我希望这是有道理的。

答案 3 :(得分:2)

SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

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

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

答案 6 :(得分: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 documentation

答案 7 :(得分:0)

就我而言,我有DATE_FORMATCONVERT_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')