gpt4 book ai didi

mysql - 检索日期之间的记录

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:19 24 4
gpt4 key购买 nike

我有以下查询,它将检索作为参数提供的开始日期和结束日期之间的事件:

SELECT * FROM events
WHERE (startDate BETWEEN CAST(@start AS DATETIME) AND CAST(@end AS DATETIME)
OR endDate BETWEEN CAST(@start AS DATETIME) AND CAST(@end AS DATETIME))

这适用于检索重叠开始和结束时间的事件,但不会获取在这些时间之间完全封装的事件。图片可能会使这一点更清楚:

事件 A|-------------------------------------------- ------------------|事件 B--------------------|------------|------------ --------------------

在哪里 |代表开始或结束日期

在我的图片中,使用带有事件 B 的开始和结束时间的查询,它不会检索事件 A。

如何更改查询以使其显示所有重叠和封装的事件?

最佳答案

SELECT * FROM events
WHERE (startDate BETWEEN CAST(@start AS DATETIME) AND CAST(@end AS DATETIME)
OR endDate BETWEEN CAST(@start AS DATETIME) AND CAST(@end AS DATETIME))
OR (endDate >= CAST(@end AS DATETIME)) AND startDate <= CAST(@end AS DATETIME))

最后的 OR 行将添加开始小于结束参数且结束大于结束参数的所有行。这样所有与@end 重叠的行都将被匹配。你也可以试试:

SELECT * FROM events
WHERE
(startDate <= CAST(@start AS DATETIME)) AND endDate >= CAST(@start AS DATETIME))
OR (endDate >= CAST(@end AS DATETIME)) AND startDate <= CAST(@end AS DATETIME))

那应该匹配你想要的一切。它匹配在 startend 上的每条记录。如果您还想匹配 startend 中包含的所有内容,但不要与它们重叠,则可能必须将它与 between 结合使用。

关于mysql - 检索日期之间的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16656646/

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