You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8+MySQL 5.6如何筛选18:00至次日06:00的数据?

解决方案:筛选跨天时间范围的记录

MySQL 简洁写法

因为你要的是非日间时段(18:00-次日06:00),可以反向匹配,用NOT BETWEEN替代两个BETWEEN的OR组合,写法更简洁:

WHERE TIME(`date_time`) NOT BETWEEN '06:00:00' AND '18:00:00'

这个逻辑和你原来的条件完全等价,MySQL 5.6完全支持TIME()函数和NOT BETWEEN语法。

Laravel 8 对应的实现方案

方式一:使用whereRaw直接执行简洁SQL

如果想直接复用上面的MySQL语句,用whereRaw可以快速实现,同时通过占位符避免SQL注入:

$targetRecords = DB::table('your_table_name')
    ->whereRaw('TIME(`date_time`) NOT BETWEEN ? AND ?', ['06:00:00', '18:00:00'])
    ->get();

方式二:使用Laravel查询构造器的whereTime方法

如果不想写原生SQL,也可以用Laravel内置的whereTime方法组合条件,闭包能确保OR逻辑仅作用于时间范围判断:

$targetRecords = DB::table('your_table_name')
    ->where(function ($query) {
        $query->whereTime('date_time', '>=', '18:00:00')
              ->orWhereTime('date_time', '<=', '06:00:00');
    })
    ->get();

内容的提问来源于stack exchange,提问作者musiermoore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:40:21