2013-12-06 4 views
6

Есть ли способ выбора записей между датами и конкретным временным диапазоном. Например, все записи с 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') 

Но как я буду устанавливать определенный временной диапазон?

ответ

8

Вы можете использовать функцию 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 
+2

есть способ сказать между часами: mins: secs вместо этого только час? – user1292656

+7

@ user1292656 конечно - вы можете использовать функцию 'TIME'. Например, 'TIME (audit.date_created) BETWEEN '05: 00: 00 'AND '15: 00: 00''. – Mureinik

0

Замените функцию DATE, она пропускает часть времени. Вместо этого используйте TIMESTAMP.

0

добавить следующую строку в запросе и установить час в BETWEEN

и времени (audit.date_created) между " 00:00:01 'AND '01: 00: 00'

0

Как и другие, HOUR() может вам помочь.

Но HOUR() или DATE() не могут использовать INDEX. Чтобы сделать запрос быстрее, я предлагаю добавить столбец time_created 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' 
Смежные вопросы