MYSQL 查询不返回 BETWEEN 的结果,但它返回小于和等于子查询的结果

Posted

技术标签:

【中文标题】MYSQL 查询不返回 BETWEEN 的结果,但它返回小于和等于子查询的结果【英文标题】:MYSQL Query does not return results with BETWEEN but it returns results with less than and equals to in subquery 【发布时间】:2019-01-24 00:16:31 【问题描述】:

出于某种奇怪的原因,如果我在查询中使用 BETWEEN,它不会返回任何结果。 (仅供参考,我简化了这个查询以便于调试,但即使在这种更简单的状态下我也看到了问题)

此查询不返回结果:

SELECT 
u.agent_number,
u.reporting_week
FROM table1 e
JOIN (
  SELECT 
   b.agent_number,
   b.reporting_week
   FROM table2 b
   GROUP BY b.agent_number
) u ON u.agent_number = e.agent_number
WHERE u.reporting_week BETWEEN '2019-01-01 00:00:00' AND '2019-01-07 00:00:00';

但是这个查询确实返回了><的结果:

SELECT 
u.agent_number,
u.reporting_week
FROM table1 e
JOIN (
  SELECT 
   b.agent_number,
   b.reporting_week
   FROM table2 b
   GROUP BY b.agent_number
) u ON u.agent_number = e.agent_number
WHERE u.reporting_week > '2019-01-01 00:00:00' AND  u.reporting_week < '2019-01-07 00:00:00';

我有一个日期为2019-01-02 10:00:00的记录。

仅供参考,以下确实给出了结果。只有在 JOIN 中才有问题:

SELECT 
b.agent_number,
b.reporting_week
FROM table2 b
WHERE b.reporting_week BETWEEN '2019-01-01 00:00:00' AND '2019-01-23 00:00:00';

编辑

我发现的另一件奇怪的事情是,如果我在肝脏 mysql 数据库上使用 BETWEEN 运行查询,它会给出结果。如果我在本地运行它,它不会。太奇怪了。是否有某种 mysql 设置会导致这种情况?

【问题讨论】:

【参考方案1】:

试试这个:

SELECT data_date from
(select '2019-01-02 10:00:00' data_date union ALL
select '2019-01-28 10:00:00') d
where DATE_FORMAT(date(data_date),'%Y-%m-%d %r') BETWEEN DATE_FORMAT(date('2019-01-01 00:00:00'),'%Y-%m-%d %r') AND DATE_FORMAT(date('2019-01-07 00:00:00'),'%Y-%m-%d %r');

SELECT 
u.agent_number,
u.reporting_week
FROM table1 e
JOIN (
  SELECT 
   b.agent_number,
   b.reporting_week
   FROM table2 b
   GROUP BY b.agent_number
) u ON u.agent_number = e.agent_number

where DATE_FORMAT(date(u.reporting_week),'%Y-%m-%d %r') BETWEEN DATE_FORMAT(date('2019-01-01 00:00:00'),'%Y-%m-%d %r') AND DATE_FORMAT(date('2019-01-07 00:00:00'),'%Y-%m-%d %r');

【讨论】:

这确实有效,但我无法解释为什么它不按我的方式工作。

以上是关于MYSQL 查询不返回 BETWEEN 的结果,但它返回小于和等于子查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL BETWEEN 查询返回不正确的结果

MySQL BETWEEN 查询不使用索引

为啥 MySql 不自动优化 BETWEEN 查询?

MYSQL 存储过程如何取得一个表的查询结果?

mysql 单表查询

距离Between()返回不准确的结果?