嘿(和少女)
有人可以指出要验证/搜索日期范围内的日期范围吗?我正在使用Laravel PHP,但原始SQL也将是完美的。
我想验证日期范围内是否存在日期范围。基本上,我希望通过可靠的验证来避免重叠的日期范围。
示例(以及我目前的概念)(laravel语法)
->where('start_date','>=',$myrange_start)
->where('start_date','<=',$myrange_end)
将在日期范围之间验证数据库中的开始日期
和
->where('start_end','>=',$myrange_start)
->where('start_end','<=',$myrange_end)
将在日期范围内验证数据库中的结束日期
对我也有用的是
->whereRaw('? between start_date and end_date', [$today])
但是,我想实现的目标是说
->whereRaw('? between start_date and end_date', [$myrange_start, $myrange_end])
所以看看是否有日期范围
a)开始:在开始,在开始和结束之间,在结束 b)开始:结束 c)结束:在开始时,在开始和en之间,在结束时 d)在开始日期之前开始,在结束日期之后结束 e)在开始日期之后开始,在结束日期之前结束
这可能吗?
答案 0 :(得分:2)
这是重叠范围问题,引用this canonical SO answer,WHERE
子句应该类似于:
WHERE new_start < existing_end
AND new_end > existing_start;
将其翻译为Laravel代码:
->where('start_date', '<', $myrange_end)
->where('start_end', '>', $myrange_start)
如果两个范围之间存在 重叠,则返回true。相反,如果您想找出没有重叠,那么我们可以尝试:
->where('start_date', '>=', $myrange_end)
->orWhere('start_end', '<=', $myrange_start)
答案 1 :(得分:1)
Laravel官方文档laravel docs whereBetween
ModelName::whereBetween('date_field', [ $start_Date, $end_date ])->get();
答案 2 :(得分:0)
好吧,认为这应该行得通。你们可以发表评论
where(function ($q) use ($start, $end) {
$q->where('start_date', '>=', $start)
->where('start_date', '<=', $end);
})
->orWhere(function ($q) use ($start, $end) {
$q->where('end_date', '>=', $start)
->where('end_date', '<=', $end);
})
->orWhere(function ($q) use ($start, $end) {
$q->where('start_date', '<', $start)
->where('end_date', '>', $end);
});