mysql 结果按 future 和过去的日期

标签 mysql

我正在尝试从数据库中获取过去 14 天和 future 14 天的记录。过去我可以得到,但 future 是个问题。

这是我正在尝试的约会格式的示例(8 天示例),它在我的服务器上运行良好:

mysql> select DATE_SUB(CURDATE(),INTERVAL +8 DAY);
+-------------------------------------+
| DATE_SUB(CURDATE(),INTERVAL +8 DAY) |
+-------------------------------------+
| 2017-09-07                          |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> select DATE_SUB(CURDATE(),INTERVAL -8 DAY);
+-------------------------------------+
| DATE_SUB(CURDATE(),INTERVAL -8 DAY) |
+-------------------------------------+
| 2017-09-23                          |
+-------------------------------------+
1 row in set (0.00 sec)

这似乎可以很好地获取过去和 future 的日期,但是,当尝试将其与我的实际查询内联时,它不想用于 future 的约会。

mysql> SELECT estatu,edates,etimes 
FROM tevent 
WHERE edates 
    BETWEEN DATE_SUB(CURDATE(),INTERVAL +8 DAY) AND CURDATE();
+----------+------------+--------+
| estatu   | edates     | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00  |
| Upcoming | 2017-09-15 | 17:00  |
| Results  | 2017-09-09 | 15:00  |
| Upcoming | 2017-09-15 |        |
| Results  | 2017-09-08 |        |
| Results  | 2017-09-08 | 19:00  |
| Results  | 2017-09-08 | 19:30  |
| Results  | 2017-09-08 | 19:30  |
| Results  | 2017-09-09 | 09:30  |
| Results  | 2017-09-09 | 12:00  |
| Results  | 2017-09-09 | 15:00  |
| Results  | 2017-09-09 | 17:00  |
| Results  | 2017-09-09 | 18:00  |
| Results  | 2017-09-09 | 19:30  |
| Results  | 2017-09-09 | 20:30  |
| Upcoming | 2017-09-15 |        |
+----------+------------+--------+
16 rows in set (0.00 sec)

mysql> SELECT estatu,edates,etimes 
FROM tevent 
WHERE edates 
BETWEEN DATE_SUB(CURDATE(),INTERVAL -8 DAY) AND CURDATE();

Empty set (0.00 sec)

这是迄今为止我尝试在此处和网络上其他地方找到的各种脚本所得到的最接近的结果。

此查询只是为了确认我有 future 的事件:

mysql> SELECT estatu,edates,etimes 
FROM tevent 
WHERE edates 
LIMIT 10;                                                                                                   
+----------+------------+--------+
| estatu   | edates     | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00  |
| Upcoming | 2017-09-15 | 17:00  |
| Upcoming | 2017-09-16 | 17:00  |
| Upcoming | 2017-09-23 | 15:00  |
| Upcoming | 2017-09-23 | 17:00  |
| Results  | 2017-09-09 | 15:00  |
| Upcoming | 2017-09-15 |        |
| Results  | 2017-03-26 |        |
| Results  | 2017-04-02 |        |
| Results  | 2017-04-09 |        |
+----------+------------+--------+
10 rows in set (0.00 sec)

编辑:我需要两个单独的结果,一个用于 future 事件,一个用于过去事件。每个请求都将通过单独的 PHP 页面连接独立请求。

========

解决方案:

感谢@etsa,发现问题出在格式上。下面的两个查询准确地提供了所需的内容,同样是 8 天的示例:

SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN DATE_SUB(CURDATE(),INTERVAL +8 DAY) AND CURDATE();
SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN CURDATE() AND DATE_SUB(CURDATE(),INTERVAL -8 DAY);

结果如下所示:

mysql> SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN DATE_SUB(CURDATE(),INTERVAL +8 DAY) AND CURDATE();
+----------+------------+--------+
| estatu   | edates     | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00  |
| Upcoming | 2017-09-15 | 17:00  |
| Results  | 2017-09-09 | 15:00  |
| Upcoming | 2017-09-15 |        |
| Results  | 2017-09-08 |        |
| Results  | 2017-09-08 | 19:00  |
| Results  | 2017-09-08 | 19:30  |
| Results  | 2017-09-08 | 19:30  |
| Results  | 2017-09-09 | 09:30  |
| Results  | 2017-09-09 | 12:00  |
| Results  | 2017-09-09 | 15:00  |
| Results  | 2017-09-09 | 17:00  |
| Results  | 2017-09-09 | 18:00  |
| Results  | 2017-09-09 | 19:30  |
| Results  | 2017-09-09 | 20:30  |
| Upcoming | 2017-09-15 |        |
+----------+------------+--------+
16 rows in set (0.00 sec)

mysql> SELECT estatu,edates,etimes FROM tevent WHERE edates BETWEEN CURDATE() AND DATE_SUB(CURDATE(),INTERVAL -8 DAY);
+----------+------------+--------+
| estatu   | edates     | etimes |
+----------+------------+--------+
| Upcoming | 2017-09-15 | 19:00  |
| Upcoming | 2017-09-15 | 17:00  |
| Upcoming | 2017-09-16 | 17:00  |
| Upcoming | 2017-09-23 | 15:00  |
| Upcoming | 2017-09-23 | 17:00  |
| Upcoming | 2017-09-15 |        |
| Upcoming | 2017-09-15 |        |
| Upcoming | 2017-09-16 | 19:30  |
| Upcoming | 2017-09-16 | 09:30  |
| Upcoming | 2017-09-16 | 19:30  |
| Upcoming | 2017-09-16 | 14:00  |
| Upcoming | 2017-09-16 | 15:00  |
| Upcoming | 2017-09-16 | 19:30  |
| Upcoming | 2017-09-17 |        |
| Upcoming | 2017-09-17 |        |
+----------+------------+--------+
15 rows in set (0.00 sec)

最佳答案

您没有获得 future 的日期,因为您的日期间隔不正确:

SELECT estatu,edates,etimes 
FROM tevent 
WHERE edates 
    BETWEEN DATE_ADD(CURDATE(),INTERVAL -8 DAY) AND DATE_ADD(CURDATE(),INTERVAL +8 DAY);

在 Between 子句中,首先是较低(较早)的值,其次是较高的值。

关于mysql 结果按 future 和过去的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234535/

相关文章:

php - 从 Tinyint 中检索并转换为 html 中的文本

Mysql查询根据两个分组条件获取计数

php mysql 和 unicode

javascript - PHP 上的 Jquery 从不同的文件创建 HTML 内容

php - 尝试从表行获取 id 来执行更新

MySQL DATE_ADD INTERVAL 不适用于 Hibernate。

mysql - 使用 SET 语句的 SQL 存储过程

MySQL:同一列中的混合编码

java - 如何使用 Windows Builder Pro 创建数据库绑定(bind)?

mysql - 安装后如何在mysql中启用联合引擎?