讨论数量:
Db::table('Leave')
->where('start_leave_date','between time',['2015-1-1','2016-1-1'])
->whereOr('end_leave_date','between time',['2015-1-1','2016-1-1'])
->select();
// SQL: SELECT * FROM `Leave` WHERE `start_leave_date` BETWEEN '2015-1-1' AND '2016-1-1' OR `end_leave_date` BETWEEN '2015-1-1' AND '2016-1-1'
明白你意思了,设请假区间为[A, B],查询时间区间为[C, D],其实你就是想求两个区间的交集吧? 那么把我上面的语句补个条件就可以实现了,因为我上面的语句,出现你描述的极端情况的时候,就是区间[A, B]包含区间[C, D]。
Db::table('Leave')
->where('start_leave_date','between time',['2015-1-1','2016-1-1'])
->whereOr('end_leave_date','between time',['2015-1-1','2016-1-1'])
->whereOr(function ($query){
$query->where('start_leave_date', '<=', '2015-1-1');
$query->where('end_leave_date', '>=', '2016-1-1');
})
->select();
Db::table('Leave') ->where('start_leave_date','<=','2016-1-1') ->where('end_leave_date','>=','2015-1-1') ->select();
明白你意思了,设请假区间为[A, B],查询时间区间为[C, D],其实你就是想求两个区间的交集吧? 那么把我上面的语句补个条件就可以实现了,因为我上面的语句,出现你描述的极端情况的时候,就是区间[A, B]包含区间[C, D]。