C# 两个日期之间所有行的SQL结果

C# 两个日期之间所有行的SQL结果,c#,sql,date,between,C#,Sql,Date,Between,我被SQL查询卡住了 我的情况是这样的:在预订桌上。我有两个简单的DATETIME列date_start和date_end,我有两个日期选择器,用户可以从中选择这两个日期和值,我们应该称之为dp_date_start和dp_date_end 结果集中的行需要符合以下条件: 如果开始日期和结束日期完全在该范围内 如果只有开始日期或结束日期在该范围内 如果开始日期或结束日期是边界值 基本上,这是一个预订逻辑,想象一下,如果房间已经有人住了,就无法预订 到目前为止,我所尝试的: SELECT * F

我被SQL查询卡住了

我的情况是这样的:在预订桌上。我有两个简单的DATETIME列date_start和date_end,我有两个日期选择器,用户可以从中选择这两个日期和值,我们应该称之为dp_date_start和dp_date_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_日期_开始”等于结束日期


提前谢谢

这里有一个很好的解释来解决您的问题。 . 很好地解释了寻找这种重叠的逻辑

您可以根据此逻辑修改查询。实施可能如下所示:

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

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

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

用您正在使用的数据库标记您的问题。此外,单引号表示您的查询是无效的SQL,应该会生成错误。我知道,请将其视为伪代码,因为我在C中使用它。它不需要100%语法有效,我只需要逻辑。顺便说一句,单引号在C和SQL中是可以的:谢谢,这看起来很有希望。我在PhpMyAdmin中得到了正确的结果,在那个表格的即兴模型中。今晚我将测试它,因为我没有那个项目。谢谢你的回答。提供的链接帮助我找到了可能的解决方案。这与您的建议略有不同:从预订中选择*,其中dp_date_start=start_date这将在即兴表格中获得正确的结果。今晚我会在真实的项目上测试它,并让你们知道。谢谢你们的更新。如果您必须更改查询,请告诉我。很高兴这个解释很有帮助。这些查询出了问题,所以我以大力水手的查询结束。也许这与C中使用的T-SQL表有关。