如何在MySQL中比较日期?

如何在MySQL中比较日期?,mysql,datetime,date,time,intervals,Mysql,Datetime,Date,Time,Intervals,我创建了一个表(名为tasks),表中的列基本上包含UNIX时间戳 我只需要选择那些在指定时间间隔内创建的结果 间隔时间为今天,明天,本周和本月 我认为如果我将时间戳转换为YYYY-MM-DD HH:MM:SS格式,MySQL可以处理它 另外,我认为我也需要在那里使用 因此,我传递时间戳来查询并比较(检查?)它是否在指定的时间间隔内,以及存储在数据库中的时间戳。要转换,我需要使用来自UNIXTIME的,对吗 如何指定这些间隔?谢谢你的建议 您需要转换UNIX\u时间戳 质疑 您可以通过以下操作更

我创建了一个表(名为
tasks
),表中的
列基本上包含UNIX时间戳

我只需要选择那些在指定时间间隔内创建的结果

间隔时间为
今天
明天
本周
本月

我认为如果我将时间戳转换为
YYYY-MM-DD HH:MM:SS
格式,MySQL可以处理它

另外,我认为我也需要在那里使用

因此,我传递时间戳来查询并比较(检查?)它是否在指定的时间间隔内,以及存储在数据库中的时间戳。要转换,我需要使用来自UNIXTIME的
,对吗


如何指定这些间隔?谢谢你的建议

您需要转换UNIX\u时间戳

质疑

您可以通过以下操作更改周、月等的间隔:

INTERVAL 1 WEEK
INTERVAL 1 MONTH
INTERVAL 1 YEAR
MySQL将自动考虑月长和闰年等

在上面的查询中,MySQL将能够使用索引,大大加快了速度。
请确保在列上使用函数,因为在这种情况下,MySQL无法在该字段上使用索引,这会导致速度大大减慢

编码恐怖,非常慢

SELECT * FROM tasks 
WHERE FROM_UNIXTIME(created_at) BETWEEN DATE_SUB(now(),INTERVAL 1 DAY) 
                                    AND now()

请参阅:

您需要转换UNIX\u时间戳

质疑

您可以通过以下操作更改周、月等的间隔:

INTERVAL 1 WEEK
INTERVAL 1 MONTH
INTERVAL 1 YEAR
MySQL将自动考虑月长和闰年等

在上面的查询中,MySQL将能够使用索引,大大加快了速度。
请确保在列上使用函数,因为在这种情况下,MySQL无法在该字段上使用索引,这会导致速度大大减慢

编码恐怖,非常慢

SELECT * FROM tasks 
WHERE FROM_UNIXTIME(created_at) BETWEEN DATE_SUB(now(),INTERVAL 1 DAY) 
                                    AND now()

请参阅:

我想创建的时间被定义为INT,您可以在其中存储时间戳。那么,比如说今天,最好的方式就是:

在UNIX时间戳(CURDATE())和UNIX时间戳(CURDATE()+间隔1天)之间创建

注:以下各项也适用:

从CURDATE()和(CURDATE()+间隔1天)之间的UNIXTIME(创建时间)


,但您可能没有机会让MySQL使用列索引。对于周/月,您需要一个更复杂的逻辑,带有week()和month()内置函数(以获取当前周/月的第一秒的时间戳)。

我猜created_at定义为INT,您可以在其中存储时间戳。那么,比如说今天,最好的方式就是:

在UNIX时间戳(CURDATE())和UNIX时间戳(CURDATE()+间隔1天)之间创建

注:以下各项也适用:

从CURDATE()和(CURDATE()+间隔1天)之间的UNIXTIME(创建时间)


,但您可能没有机会让MySQL使用列索引。对于周/月,您需要一个更复杂的逻辑,带有week()和month()内置函数(以获取当前周/月第一秒的时间戳)。

没问题,只需简单的输入:)谢谢,Johan。例如,这个月怎么样?我需要放多少作为间隔?30?
间隔7天
间隔1个月
(处理31/29/28天的月份),
间隔1年
(处理闰年),都可以。没问题,只需简单的键入:)谢谢,约翰。例如,这个月怎么样?我需要放多少作为间隔?30?
间隔7天
间隔1个月
(考虑31/29/28天的月份),
间隔1年
(考虑闰年),所有这些都将起作用。