2015-07-28 5 views
1

У меня есть стол postgresql с столбцом типа timestamp without timezone. Каждая строка увеличивается/уменьшается на 1 минуту, например:Выберите данные временной отметки для определенного временного диапазона каждый день

2015-07-28 01:35:00 
2015-07-28 01:34:00 
2015-07-28 01:33:00 
... 
... 
2015-07-27 23:59:00 
2015-07-27 23:58:00 
2015-07-27 23:57:00 

Я пытаюсь написать запрос, который будет выбирать все строки между определенным диапазоном дат, но и в течение определенного интервала времени в те дни, например: Выберите все строки между 2015-05-20 по 2015-06-20 в период с 08:00:00 до 16:00:00.

Все, что я пробовал до сих пор, похоже, не учитывает как требования даты, так и времени.

ответ

3

Я не уверен, что я правильно понимаю вас, но если вы хотите, чтобы все строки за те дни, указанные, но исключить строки из тех дней, когда время часть находится за пределами 08:00 к 16:00 следующий должен сделать это:

select * 
from the_table 
where the_column::date between date '2015-05-20' and date '2015-06-20' 
    and the_column::time between time '08:00::' and '16:00:00' 

Выражение the_column::date называется литой и преобразует timestamp в date, удаляя информацию о времени. the_column::time извлекает временную часть столбца timestamp.

Оператор будет включать границы (например, строки со временем точно в 16:00:00). Если вы не хотите, вам нужно будет изменить состояние between на соответствующие условия > и <.

+0

Спасибо. Я не знал, как бросить, поэтому я боролся. – darkpool

+0

Последующий вопрос @a_horse_with_no_name .. I f Я хочу получить между '16: 00: 00' в текущий день и' 08: 00: 00' ** на следующий день **, как это можно сделать? – mohitsharma44

+1

'между current_date + time '16: 00 'и (current_date + 1) :: timestamp' –

Смежные вопросы