好的,所以这有点令人困惑(因此我寻求帮助的原因)
我在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查询,它将使用用户选择的两个日期在这两个日期PER ROW中搜索日期。
即。用户选择日期范围:2015年9月21日至2015年12月21日。然后,查询将使用表中的现有日期范围查找这些日期之间的日期。
答案 0 :(得分: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);
答案 1 :(得分:1)
请试试这个
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'))
) ;