在日期范围和特定时间范围之间选择

时间:2013-12-06 14:07:19

标签: mysql sql select time

有没有办法在日期和特定时间范围之间选择记录。例如,2013-11-01至2013-11-30之间的所有记录在05:00至15:00之间。这就是我到现在所做的。

    select count(*) as total from tradingaccounts accounts
inner join tradingaccounts_audit audit on audit.parent_id = accounts.id
where date(audit.date_created) between date('2013-11-01 00:00:00') AND date('2013-11-01 23:59:59') 

但是我如何设定具体的时间范围呢?

5 个答案:

答案 0 :(得分:9)

您可以使用HOUR功能在小时数上添加其他条件:

select count(*) as total from tradingaccounts accounts
inner join tradingaccounts_audit audit on audit.parent_id = accounts.id
where date(audit.date_created) between date('2013-11-01 00:00:00') AND date('2013-11-01 23:59:59') 
AND HOUR (audit.date_created) BETWEEN 5 AND 15

答案 1 :(得分:0)

替换您的DATE功能,它会跳过时间部分。请改用TIMESTAMP

答案 2 :(得分:0)

在查询中添加以下行并在BETWEEN中设置小时

<00>和'00:00:01'和'01:00:00'之间的时间(audit.date_created)

答案 3 :(得分:0)

正如其他人回答的那样,HOUR()可以帮到你。

但是HOUR()或DATE()不能使用INDEX。为了更快地进行查询,我建议添加time_created TIME列并仅保存TIME部分。之后ADD INDEX(date_created, time_created)。最后通过以下查询,您可以高速检索行。

where audit.date_created between '2013-11-01 00:00:00' AND '2013-11-01 23:59:59'
  AND audit.time_created BETWEEN '05:00:00' AND '15:00:00'

答案 4 :(得分:0)

如果使用date(audit.date_created),则date_created字段上的索引将无效。

只需使用where audit.date_created >= 'xx-xx-xx' and audit.date_created < 'xx-xx-xx'