MySQL:验证速率范围内的日期范围(laravel可选)

时间:2019-01-04 06:20:31

标签: php mysql laravel

嘿(和少女)

有人可以指出要验证/搜索日期范围内的日期范围吗?我正在使用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)在开始日期之后开始,在结束日期之前结束

这可能吗?

3 个答案:

答案 0 :(得分:2)

这是重叠范围问题,引用this canonical SO answerWHERE子句应该类似于:

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);
        });