【问题标题】:SQL results for all rows between two dates两个日期之间所有行的 SQL 结果
【发布时间】:2021-04-23 08:09:28
【问题描述】:

我被 SQL 查询卡住了。

我有这样的情况:在bookings 表中。我有两个简单的DATETIMEdate_startdate_end,我有两个日期选择器,用户可以从中选择这两个日期和值,我们应该调用dp_date_startdp_date_end

结果集中的行需要符合以下条件:

  • 如果date_startdate_end 完全在该范围内
  • 如果只有date_startdate_end 在该范围内
  • 如果date_startdate_end 是边框值

基本上这是一个预订逻辑,想象一下如果房间已经被占用,则无法预订。

到目前为止我所尝试的:

SELECT * 
FROM bookings 
WHERE 'dp_date_start' BETWEEN start_date AND end_date 
   OR 'dp_date_end' BETWEEN start_date AND end_date 
   OR start_date BETWEEN 'dp_date_start' AND 'dp_date_end' 
   OR end_date BETWEEN 'dp_date_start' AND 'dp_date_end';

但如果失败,即 'dp_date_start' 等于 end_date

提前致谢!

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。此外,单引号表示您的查询是无效的 SQL,应该会产生错误。
  • 我知道,将其视为伪代码,因为我在 C# 中使用它。它不需要 100% 语法有效,我只需要逻辑。顺便说一句,单引号在 SQL 中的 C# 中是可以的 :)

标签: c# sql date between


【解决方案1】:

这里有一个很好的解释来解决您的问题。 https://stackoverflow.com/a/325964/1500601。很好地解释了找到此类重叠的逻辑。

您可以根据此逻辑修改您的查询。大概实现是这样的:

SELECT * FROM bookings WHERE dp_date_start <= end_date AND start_date >= dp_date_end

【讨论】:

  • 感谢您的回答。提供的链接帮助我找到了可能的解决方案。这与您的建议略有不同:SELECT * FROM bookings WHERE dp_date_start &lt;= end_date AND dp_date_end &gt;= start_date 这让我在即兴表格中得到了正确的结果。今晚我会在真实项目上测试它并告诉你。
  • 感谢更新。如果您必须更改查询,请告诉我。很高兴解释很有帮助。
  • 这些查询出了点问题,所以我最终得到了 Popeye 的查询。也许这与 T-SQL 表(在 C# 中使用)有关。
【解决方案2】:

您有两个开始日期和两个结束日期。您可以检查两个开始日期是否在两个期间之间,如下所示:

SELECT * FROM bookings 
WHERE dp_date_start between start_date AND end_date 
   OR start_date BETWEEN dp_date_start and dp_date_end

【讨论】:

  • 谢谢,这看起来很有希望。在该表的即兴模型中,我在 PhpMyAdmin 中得到了正确的结果。我今晚会测试它,因为我的 atm 没有那个项目。
猜你喜欢
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 2014-06-11
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多