SQL之间没有返回所有结果

时间:2016-12-05 12:08:50

标签: mysql between

我有这个简单的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行

enter image description here

图像显示这些报告都在这些日期之间,所以我应该得到12行。这是从数据库中获取日期和日期的正确方法,即使我的created_at具有时间戳值。或者我需要在日期附加时间吗?

3 个答案:

答案 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:012016-12-31 23:59:59之外。

您可能希望包含2016年12月31日,在这种情况下,您可以将第二个日期更改为2017-01-01 00:00:00