查询中具有特定小时范围的日期范围

时间:2020-04-22 11:17:06

标签: sql date

我想过滤4月1日至4月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 :(得分:0)

我认为您想要这样的东西:

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模式与日期常量混淆。如果是这样,那就被误导了。