我有这个简单的Mysql查询
select *
from reportings
where findcampaign = 1 and
is_click = 1 and
created_at BETWEEN date(2016-11-01) AND date(2016-12-31)
这应返回findcampaign = 1且is_click = 1的所有行,其中created_at日期介于2016-11-01和2016-12-31之间。
正在运行select * from reportings where findcampaign = 1 and is_click = 1
给了我12行
图像显示这些报告都在这些日期之间,所以我应该得到12行。这是从数据库中获取日期和日期的正确方法,即使我的created_at具有时间戳值。或者我需要在日期附加时间吗?
答案 0 :(得分:3)
你应该为日期加上引号
select *
from reportings
where findcampaign = 1 and
is_click = 1 and
created_at BETWEEN date('2016-11-01') AND date('2016-12-31')
答案 1 :(得分:1)
试试这个
select * from reportings where findcampaign = 1 and is_click = 1 and created_at BETWEEN date('2016-11-01') AND date('2016-12-31')
答案 2 :(得分:1)
您询问谓词在哪里将日期与包含datetime
数据的列进行比较。如果您将日期放在单引号中,如上所述,那么它应该可以正常工作,但通常最好更清楚地了解自BETWEEN
以来发生的事情时使用日期可能会造成混淆。
我建议:
select *
from reportings
where findcampaign = 1 and
is_click = 1 and
created_at >= '2016-11-01 00:00:00' and
created_at <= '2016-12-31 00:00:00';
此条件与您的查询中的条件相同,并且非常清楚地表明2016年12月31日created_at
的所有值都将被排除在2016-12-31 00:00:01
到2016-12-31 23:59:59
之外。
您可能希望包含2016年12月31日,在这种情况下,您可以将第二个日期更改为2017-01-01 00:00:00