-->

在日期时间字段中的MySQL忽略时间部分比较日期(Comparing dates in MySQL

2019-06-24 21:13发布

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

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

即使有约会,我们没有检索到任何行2012-05-03 10:16:46在MySQL表。 如何能在时间部分DateTime字段,而在MySQL中比较日期被忽略?

Answer 1:

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


Answer 2:

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

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

你可以看一下这个更多的功能。



Answer 3:

@马克已经得到了很好的方法,但只是要小心,你将永远有计算和找到第二天在这种情况下。 如果你想避免这种情况,仍然忽略时间,你可以做到以下几点:

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

我希望这是有道理的。



Answer 4:

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


Answer 5:

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

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


Answer 6:

这是有点老了....但一个正确的答案也就是使用DATE_FORMAT在列order_date的象下面这样:

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


Answer 7:

在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 文档 。



Answer 8:

在我来说,我有, 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')


文章来源: Comparing dates in MySQL ignoring time portion of a DateTime field