gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:08:56 24 4
gpt4 key购买 nike

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

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

+------+------------+---------------------+---------------------+ 
| 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com