之前遇到一个需求,需要查询日期范围内某一固定时段的数据,因为没有碰到过这种情况,当时也是挺头疼的,记录下自己的解决方法吧
举个例子,查询2018-10-01
到2018-11-01
中,每天9:00
到12:00
的数据
首先想到的第一个办法就是利用Eloquent
自带的查询方法1
2
3
4
5Model::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
2select * 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)
方法,将时间戳格式化为小时数后进行查询