【问题标题】:SQL for locating a date range using a date range使用日期范围定位日期范围的 SQL
【发布时间】:2016-02-22 04:24:20
【问题描述】:

好的,所以这有点令人困惑(这就是我寻求帮助的原因)

我在 MySQL 数据库中有一个如下所示的表:

+-----+-------------+------------+------------+---------------+---------+-----------+---------+
| id  | supplier_id | start_date | end_date   | days_attended | user_id | client_id | trashed |
+-----+-------------+------------+------------+---------------+---------+-----------+---------+
|   1 |          15 | 1410098400 | 1410703200 |             2 |       7 |       424 |       0 |
|   2 |          84 | 1411912800 | 1420117200 |             3 |       7 |       395 |       0 |
|   3 |         183 | 1390827600 | 1418907600 |             2 |       7 |        96 |       0 |
|   4 |          85 | 1412431200 | 1419512400 |             5 |       7 |       105 |       0 |
|   5 |         168 | 1411912800 | 1412258400 |             3 |       7 |        53 |       0 |

我的困境是我想从这个表格中创建一个报告,该报告将日期范围作为输入,并返回该日期范围内的日期列表。

如您所见,每一行都有一个开始和结束日期。所以我需要一个 SQL 查询,它将使用用户选择的两个日期在这两个日期的每行中搜索一个日期。

即用户选择日期范围:21/09/2015 到 21/12/2015。然后查询将使用表中的现有日期范围查找这些日期之间的日期。

【问题讨论】:

  • 如何处理重叠范围?未完全包含在使用规定范围内
  • 您希望表格中给出的开始日期和结束日期都在用户指定的两个日期之间吗?
  • 表中的两个日期都不需要在指定的日期内。只要一个是或表日期之间的任何日期。

标签: php mysql date


【解决方案1】:

如果要检查 start_date 或 end_date 是否在用户的开始日期和结束日期之间。

您可以在此处插入 user_start_date 和 user_end_date 的用户值:

SELECT * FROM table 
WHERE (start_date >= user_start_date AND start_date <= user_end_date) 
OR (end_date >= user_start_date AND end_date <= user_end_date);

【讨论】:

    【解决方案2】:

    请试试这个

    SELECT * FROM table WHERE (
    start_date >= UNIX_TIMESTAMP(STR_TO_DATE(var_date_1, '%d/%M/%Y')) AND 
    end_date <= UNIX_TIMESTAMP(STR_TO_DATE(var_date_2, '%d/%M/%Y'))
    ) ;
    

    【讨论】:

      猜你喜欢
      • 2017-12-20
      • 2014-01-07
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多