mysql - SQL/Mysql查询数据库中可用日期

标签 mysql sql date web calendar

我需要一些帮助来查询我的日历/日期表

场景: 我有一个带有日期的“日历”表,用户将设置他的可用日期,通常是一天一天。所以我的表看起来像这样:

+------+------------+---------------------+---------------------+ 
| ID   | user_id    | start_date          | end_date            | 
+------+------------+---------------------+---------------------+ 
|    1 |          1 | 2016-09-01 08:00:00 | 2016-09-01 16:00:00 | 
|    2 |          1 | 2016-09-03 08:00:00 | 2016-09-03 16:00:00 | 
|    3 |          1 | 2016-09-04 08:00:00 | 2016-09-04 16:00:00 | 
|    3 |          1 | 2016-09-05 08:00:00 | 2016-09-05 16:00:00 | 
+------+------------+---------------------+---------------------+ 

这意味着用户 1 在 1 号、3 号、4 号和 5 号有空。

假设我想查询表并查找从日期 2016-09-01 08:00:00 到 2016-09-05 16:00:00 用户是否可用,此查询必须返回零行,因为用户9 月 2 日不可用。但是如果从日期 2016-09-03 08:00:00 到 2016-09-05 16:00: 00 查询,那么它将返回这 3 行。

希望有人能帮我解决这个问题

最佳答案

这可能是一种方式(对于单个用户)。

注意 @endDate@startDate 是提供的要搜索的日期字段。

SELECT 
*
FROM your_table 
WHERE EXISTS (
    SELECT 
    user_id
    FROM your_table 
    WHERE start_date >= @startDate 
    AND start_date <= @endDate
    AND user_id = 1
    GROUP BY user_id 
    HAVING SUM((DATEDIFF(end_date,start_date)+1)) = DATEDIFF(@endDate,@startDate)+1
)
AND start_date >= @startDate 
AND start_date <= @endDate
AND user_id = 1

注意:

如果提供的日期范围落在 start_dateend_date(不包括)范围内,则它将不起作用。

因为 SUM((DATEDIFF(end_date,start_date)+1)) = DATEDIFF(@endDate,@startDate)+1 在这种情况下不相等。 条件

在这种情况下,您需要保持在要求的范围内。这里的边界由 end_date@endDate 的较小值以及 start_date@startDate 的较大值划分>.

假设,你有如下记录(只有一条)

start_date = 2016-09-01end_date=2016-09-05

@startDate=2016-09-02@endDate=2016-09-04

现在检查上述条件对于这组数据是否会失败。

在这种情况下,您需要采用以下查询:

SELECT 
*
FROM your_table 
WHERE EXISTS (
    SELECT 
    user_id
    FROM your_table 
    WHERE end_date >= @startDate 
    AND start_date <= @endDate
    AND user_id = 1
    GROUP BY user_id 
    HAVING SUM((DATEDIFF(LEAST(end_date,@endDate),GREATEST(start_date,@startDate))+1)) = DATEDIFF(@endDate,@startDate)+1
)
AND end_date >= @startDate 
AND start_date <= @endDate
AND user_id = 1

关于mysql - SQL/Mysql查询数据库中可用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39546091/

相关文章:

bash - 计算距离特定日期还剩多少天

mysql - @Temporal - 日期格式 - JPA

sql - 使用 Total 获取 PostgreSQL 中组百分比的最佳方法是什么

java - 给定出生日期计算下一个生日日期?

sql - 没有从 SQlite 表中提取任何内容?

mysql - 获取每个ID的最新记录

javascript - JSON.parse 或替代库也将解析日期

mysql - 使用 Entity Framework 通过 SSH 隧道连接到 MySQL

php - 多次更新登录用户表中的字段

php - MySQL根据时间戳周期选择未使用/过时的ID