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 的结果,但它返回小于和等于子查询的结果的主要内容,如果未能解决你的问题,请参考以下文章