SQL 不返回所有结果之间

SQL between not returning all results

我有这个简单的 Mysql 查询

select *
from reportings
where findcampaign = 1 and
      is_click = 1 and
      created_at BETWEEN date(2016-11-01) AND date(2016-12-31)

这应该 return 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 具有时间戳值。或者我需要在日期上附加时间吗?

你应该为日期加上引号

select *
from reportings
where findcampaign = 1 and
      is_click = 1 and
      created_at BETWEEN date('2016-11-01') AND date('2016-12-31')

嘿,我只是个语法错误小伙伴。日期

中需要单个引号

试试这个

select * from reportings where findcampaign = 1 and is_click = 1 and created_at BETWEEN date('2016-11-01') AND date('2016-12-31')

您询问的是将日期与具有 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