我需要比较在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中比较日期被忽略?
我需要比较在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中比较日期被忽略?
您可以使用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'
如果你想在一个日期来传递,那么你可以尝试这样的事:
where YEAR(order_date)='2012' AND MONTH(order_date)='05' AND DAY(order_date)='03'
你可以看一下这个更多的功能。
@马克已经得到了很好的方法,但只是要小心,你将永远有计算和找到第二天在这种情况下。 如果你想避免这种情况,仍然忽略时间,你可以做到以下几点:
WHERE order_date >= '2012-05-27 00:00:00' AND order_date <= '2012-05-27 23:59:59'
我希望这是有道理的。
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
也许,你可以像使用功能date()
但在这种情况下,速度可以降低,因为索引不能被使用。 所以,我建议使用
SELECT * FROM order_table
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59')
这是有点老了....但一个正确的答案也就是使用DATE_FORMAT在列order_date的象下面这样:
SELECT * FROM order_table where date_format(order_date, '%Y-%m-%d')='2012-05-03';
在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 文档 。
在我来说,我有, 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')