选择在一天中的某个时间创建的两个日期之间的所有记录 - MySQL

时间:2014-02-18 23:04:33

标签: php mysql laravel

我正在使用Laravel 3 - PHP和MySQl。

我需要选择在两个日期(created_at DATETIME)之间和两次(下午3点到下午6点)之间创建的所有记录。

$query->where_between('created_at', $this->s['start'], $this->s['end']);

如何在当天的下午3点到6点之间添加时间范围?

修改

$this->s['start'] = '2014-2-14';

$this->s['end'] = '2014-2-16';

Timerange:06:00:00和UTC时间09:00:00

日期存储在日期时间,如2014-2-15 06:43:56

示例数据

记录:

2014-2-142014-2-17以及07:00:0014:00:00之间。

  • 2014-2-15 06:43:56
  • 2014-2-16 08:43:56 *
  • 2014-2-17 15:43:56
  • 2014-2-17 10:43:56 *
  • 2014-2-18 12:43:56
  • 2014-2-19 14:43:56
  • 2014-2-20 16:43:56

*所选记录

遵循:

$query->raw_where('EXTRACT(HOUR_SECOND from `created_at`) between 070000 and 140000');

更简单的方法吗?

2 个答案:

答案 0 :(得分:0)

你为什么不用sql这样做?过滤是SQLs raison d'etre的重要组成部分。实际上,between条款的存在正是出于这个原因:

SELECT pkid from tbl where datetime_field between 7:00:00 and 14:00:00

考虑到数据库本身的限制,我建议尽可能保持过滤尽可能接近数据库。

答案 1 :(得分:-1)

我认为您只需要在请求中添加其他where_between约束:

$query->where_between('created_at', $this->s['start'], $this->s['end'])
      ->where_between('created_at', '6:00:00', '9:00:00');

没试过,但它应该做的工作!

感谢hd1 for SQL tip。