我有这个查询声明。
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>
答案 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'