id date_start date_end
1 2018-01-01 2018-03-31
2 2018-04-01 2018-06-30
3 2018-07-01 2018-09-30
4 2018-10-01 2018-12-31
至于输入,我有time_start
和time_end
。如何通过将time_start
和time_end
与date_start
和date_end
进行比较来选择这些日期之间的所有行?
谢谢。
答案 0 :(得分:1)
""之间是什么意思?其余部分假定开始时间在结束时或之前。
一个定义是整个"时间"期间是在期间。
select t.*
from t
where @time_start >= date_start and @time_end <= date_end;
另一个是时期重叠:
select t.*
from t
where @time_end >= date_start and @time_start <= date_end;
答案 1 :(得分:0)
这是你想要的吗?
select * from yourtable where
time_start between date_start and date_end or time_end between date_start and date_end
答案 2 :(得分:0)
我假设两个输入日期都应该在date_字段之间。
select * from whatever
where time_start between date_start and date_end
and time_end between date_start and date_end
答案 3 :(得分:0)
Select * from myTable
Where time_start < date_end and time_end > date_start
会给你重叠日期。你会调整&lt;和&gt;根据您的需要。例如,如果date_end是2018-05-06而你的time_start也是2018-05-06,那么要包含它你将使用:
... time_start <= date_end
如果像预订一样,这些date_end,time_start值不会被视为重叠(一天检出,另一个检入),然后:
... time_start < date_end
HTH