【问题标题】:how to check multiple dates between startdate and enddate in query c#如何在查询c#中检查startdate和enddate之间的多个日期
【发布时间】:2018-02-08 10:42:47
【问题描述】:

在 C# 中工作。 我有两个名为start_date_enteredend_date_entered 的日期对象,我的表中有两列start_dateend_date。我必须查询我的表,如果start_date_enteredend_date_entered 之间的任何日期存在于start_dateend_date 之间。

DateTime start_date_entered = Convert.ToDateTime('01/01/2018 12:00:00 AM');
DateTime end_date_entered = Convert.ToDateTime('03/01/2018 12:00:00 AM');

数据库列 start_date 包含比方说 3 月 25 日,end_date 包含 27 日。如果这两个序列有任何共同的日期,则不应从数据库返回任何行。如果两个序列之间有任何共同的日期,那么数据库应该返回该行。

select * from employee_leaves where ... between start_date and end_date

我应该在“...”中写什么,因为我想在 start_date_enteredend_date_entered 之间放置一系列日期

这些我都试过了,

Fetching Dates Which Comes Between StartDate and EndDate

How to list all dates between two dates [duplicate]

但没有找到任何解决方案。

【问题讨论】:

  • 但没有找到任何解决方案 什么没有按您的预期工作?
  • 你能给出一些输入数据和预期输出的例子吗?
  • 我的查询不完整。我没有办法将整个序列写在我放置“...”的位置
  • 我做了一些编辑@ChetanRanpariya

标签: c# mysql date


【解决方案1】:

如果您要查询与给定时间范围(开始/结束)相交的所有内容 - 尝试可视化您想要包含的所有可能性;例如:

       |<--range-->|
       |           |
   [---+-----------+----]          scenario 1 - starts before, ends after
       |   [---]   |               scenario 2 - starts and ends inside
       |   [-------+-----------]   scenario 3 - starts inside, ends after
   [---+-------]   |               scenario 4 - starts before, ends inside
       |           |

场景 2、3、4 将通过检查 either end 是否在查询中来处理;场景一需要单独处理;所以:

where x.Start between @start and @end
   or x.End between @start and @end
   or (x.Start < @start and x.End > @end)

注意between 是一个inclusive 范围查询;如果您需要更多地控制边界条件,请使用您选择的不等式运算符将 between 扩展为一对明确的开始/结束限制。

【讨论】:

  • 对于 4 种场景中的任何一种,都不应从数据库返回任何行。
  • @FarrukhSarmad 很好;我不明白为什么不,但无论如何——不是我的问题;您知道您想要返回哪些行的规则 - 所以:为您想要包含和排除的内容绘制等效映射,并从中确定适合您需要的 where 过滤器;这里的示例 - 虽然是大多数人在对具有日期范围的实体进行日期范围查询时通常想要的 - 是为了说明性,而不是确定性
  • 数据库中有员工请假已获批准。我想限制用户在他已经批准的相同日期再次申请休假。
  • @FarrukhSarmad 很棒;所以画出你想要的表格,并实现相应的where 查询......坦率地说,在我看来,我已经发布的代码会发现任何安排在相关范围内的休假,所以我不确定我发布的代码如何不是 100% 合适的。
  • 我用我的变量对其进行了修改,因此如果存在任何日期,您的代码将返回一行。现在,当我在 dataReader 对象中读取它时,如果 dr.Read() 将返回 true,那么我将提示用户您输入的日期已被批准休假:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多