在c#中工作。
我有两个名为start_date_entered
和end_date_entered
的日期对象,我的表start_date
和end_date
中有两列。如果start_date_entered
和end_date_entered
之间的任何日期出现在start_date
和end_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包含让我们说25th march和end_date包含27th march。如果两个序列都有共同的日期,则不应从数据库返回任何行。如果两个序列之间存在任何共同日期,则数据库应返回该行。
select * from employee_leaves where ... between start_date and end_date
我应该在“...”中写什么,因为我想在start_date_entered
和end_date_entered
之间设置一系列日期
我试过这些,
Fetching Dates Which Comes Between StartDate and EndDate
How to list all dates between two dates [duplicate]
但是没有找到任何解决方案。
答案 0 :(得分:5)
如果您要查询与给定时间范围(开始/结束)相交的所有内容,请尝试可视化您想要包含的内容的所有可能性;例如:
|<--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将通过检查 结尾是否在查询中来处理;方案1需要单独处理;这样:
where x.Start between @start and @end
or x.End between @start and @end
or (x.Start < @start and x.End > @end)
请注意,between
是包含范围查询;如果您需要更多地控制边界条件,请使用您选择的不等运算符将between
扩展为一对明确的开始/结束限制。