mysql - MySQL日期比较查询
问题描述
我的数据库中有这张表:
table t
id | a | b | date_x
1 | 81 | 12 | 2018-03-16
2 | 9 | 54 | 2025-04-21
3 | 81 | 67 | 2018-03-16
4 | 763 | 81 | 2018-03-16
5 | 90 | 22 | 2025-12-08
date_x 是日期类型
我想选择 a = 81 或 b = 81 且 date_x 在 2019-05-28 之前的行。
所以我在 MySQL Workbench 中执行以下查询:
SELECT * FROM t
WHERE a = '81' OR b = '81'
AND date_x > '2019-05-28';
这就是我得到的:
1 | 81 | 12 | 2018-03-16
3 | 81 | 67 | 2018-03-16
我希望 2018-03-16 不迟于 2019-05-28 。此外,为什么只返回 2 行?在 date_x 列中还有另一个日期相同。
此查询返回相同:
SELECT * FROM t
WHERE a = '81' OR b = '81'
AND date_x > str_to_date('2019-05-28', '%Y-$m-%d');
我为调试执行了以下查询:
SELECT * FROM t
WHERE a = '81' OR b = '81'
AND date_x < '2019-05-28';
和
SELECT * FROM t
WHERE a = '81' OR b = '81'
AND date_x < str_to_date('2019-05-28', '%Y-$m-%d');
然后两者都按预期返回:
1 | 81 | 12 | 2018-03-16
3 | 81 | 67 | 2018-03-16
4 | 763 | 81 | 2018-03-16
我阅读了以下问答,但我仍然遗漏了一些东西:
有什么提示吗?谢谢
解决方案
您的查询具有以下形式
SELECT * FROM t WHERE condition_a OR condition_b AND condition_c
运算符的AND
绑定比 强OR
,因此您最终得到
SELECT * FROM t WHERE condition_a OR (condition_b AND condition_c)
这就是我认为混乱的来源。与日期无关。
推荐阅读
- python - Flask web 刮板问题与表头数据
- visual-studio-code - vscode扩展,设置window.activeTextEditor
- sqlite - Sqlite - 使用 GROUP BY 选择 DISTINCT
- c++ - 在线绘制和可视化递归树
- java - 在 Java 中的这个例子中 += 赋值的简写是什么?
- java - 如何通过邮件接收反馈内容
- javascript - Firebase JavaScript 排序
- python-3.x - 密码保护python生成的xml文件
- c++ - 在骰子上没有得到正确的预期输出
- python - 我基本上想做一个元素加法,但只使用 for 循环,所以没有 numpy 或 map