查询日期范围内固定时段的数据

之前遇到一个需求,需要查询日期范围内某一固定时段的数据,因为没有碰到过这种情况,当时也是挺头疼的,记录下自己的解决方法吧

举个例子,查询2018-10-012018-11-01中,每天9:0012:00的数据

首先想到的第一个办法就是利用Eloquent自带的查询方法

1
2
3
4
5
Model::whereDate('created_at', '>=', '2018-10-01')
->whereDate('created_at', '<=', '2018-11-01')
->whereTime('created_at', '>=', '09:00')
->whereTime('created_at', '<=', '12:00')
->get();

算是最简单的解决这种需求的方法,但是可惜的是数据库中存的并不是日期格式,而是10位的unix时间戳,不过也算是从laravel这个方法中得到启发,想到了利用SQL直接格式化时间来查询的方法

1
2
select * from orders where add_time >= 1538323200 and  add_time <= 1541001600 
and FROM_UNIXTIME(add_time, "%H") >= 9 and FROM_UNIXTIME(add_time,"%H") < 12

使用FROM_UNIXTIME(unix_timestamp,format)方法,将时间戳格式化为小时数后进行查询

文章目录
|