Диапазон дат с указанным диапазоном c часов в запросе - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу отфильтровать диапазон дат с 1 по 22 апреля, но только с 8:00 до 6:00. У вас есть идеи, как это сделать? Единственное, что я пока сделал, это диапазон дат, но я не знаю, что делать дальше.

select * from cdm_service_request_logs
where inserted_at  >= '20/04/01 20:00:00%'
and inserted_at < '20/04/22 06:00:00%'
ORDER BY ID DESC;

1 Ответ

0 голосов
/ 22 апреля 2020

Я думаю, вы хотите что-то вроде этого:

select srl.*
from cdm_service_request_logs srl
where inserted_at >= date '2020-04-01' and
      inserted_at < date '2020-04-022' and
      extract(hour from inserted_at) not between 6 and 19;

В Oracle для сравнения времени часто используются строки:

where inserted_at >= date '2020-04-01' and
      inserted_at < date '2020-04-022' and
      (to_char(inserted_at, 'HH24:MI') >= '20:00' or
       to_char(inserted_at, 'HH24:MI') < '06:00'
      )

Обратите внимание, что для сравнения дат используется постоянная даты ценности. Это правильно. % недопустимо для даты, поэтому ваши сравнения в виде строк. Я могу только предположить, что вы путаете шаблоны like с константами даты. Если это так, то это просто заблуждение.

...