如何比较MySQL中的日期?

daG*_*vis 1 mysql time datetime date intervals

我有表(命名tasks)与列created_at,基本上,包含UNIX时间戳.

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

间隔today,tomorrow,this weekthis month.

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

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

所以,我传递时间戳来查询和比较(检查?)它在指定的时间间隔内是否存储在数据库中的时间戳.要转换,我需要使用FROM_UNIXTIME,对吗?

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

Joh*_*ica 6

您需要转换UNIX_TIMESTAMP.

询问

SELECT * FROM tasks
WHERE created_at BETWEEN UNIX_TIMESTAMP(DATE_SUB(now(),INTERVAL 1 DAY)) 
                     AND UNIX_TIMESTAMP(now())
Run Code Online (Sandbox Code Playgroud)

您可以通过执行以下操作来更改周,月等的间隔:

INTERVAL 1 WEEK
INTERVAL 1 MONTH
INTERVAL 1 YEAR
Run Code Online (Sandbox Code Playgroud)

MySQL将自动考虑月份和闰年等的长度.

在上面的查询中,MySQL将能够使用索引,加速了很多事情.
确保不要在列上使用函数,因为在这种情况下,MySQL不能在该字段上使用索引,从而导致严重的缓慢.

编码恐怖,很慢

SELECT * FROM tasks 
WHERE FROM_UNIXTIME(created_at) BETWEEN DATE_SUB(now(),INTERVAL 1 DAY) 
                                    AND now()
Run Code Online (Sandbox Code Playgroud)

请参阅:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add