在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');
Run Code Online (Sandbox Code Playgroud)
数据库列start_date包含让我们说25th march和end_date包含27th march.如果两个序列都有共同的日期,则不应从数据库返回任何行.如果两个序列之间存在任何共同日期,则数据库应返回该行.
select * from employee_leaves where ... between start_date and end_date
Run Code Online (Sandbox Code Playgroud)
我应该在"......"中写什么,因为我想在这里start_date_entered和end_date_entered这里之间设置一系列日期
我试过这些,
但还没有找到任何解决方案.
如果您要查询与给定时间范围(开始/结束)相交的所有内容,请尝试可视化您想要包含的内容的所有可能性; 例如:
|<--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
| |
Run Code Online (Sandbox Code Playgroud)
将通过检查任一端是否在查询中来处理场景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)
Run Code Online (Sandbox Code Playgroud)
请注意,这between是一个包含范围查询; 如果您需要更多地控制边界条件,请between使用您选择的不等运算符扩展到一对明确的开始/结束限制.
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |