MySQL - 日期间隔无法正常工作

时间:2016-03-21 12:15:05

标签: mysql sql

我有这个查询声明。

SELECT categories.cat_name, search_logs.created_at 
FROM (search_logs INNER JOIN categories ON search_logs.qry_category = categories.code) 
WHERE search_logs.created_at between '2016-03-20' and '2016-03-21';

问题是在2016-03-20和2016-03-21之间创建了记录,实际上如果我删除它们出现的WHERE子句,但是如果我运行查询之前写的那个Mysql给我一个空的集。

修改 created_at时间戳类型,并以 2016-03-21 13:18:39 格式存储 EM>

2 个答案:

答案 0 :(得分:3)

我怀疑您感到困惑,因为列created_at包含日期和时间组件。一种解决方案是将其转换为日期:

WHERE date(search_logs.created_at) between '2016-03-20' and '2016-03-21';

但是,我认为在使用日期/时间时最好避免使用between。犯错很容易。相反,对第二个使用<进行显式比较:

WHERE search_logs.created_at >= '2016-03-20' and
      search_logs.created_at < '2016-03-22';

Aaron Bertrand(SQL Server MVP)撰写了关于此主题的blog。虽然它是针对SQL Server的,但between上的建议适用于大多数数据库,包括MySQL。

答案 1 :(得分:0)

您可以使用DATE(search_logs.created_at)或使用比较运算符,如下所示:

SELECT categories.cat_name, search_logs.created_at 
FROM (search_logs INNER JOIN categories ON search_logs.qry_category = categories.code) 
WHERE search_logs.created_at >= '2016-03-20' and search_logs.created_at < '2016-03-21'