SQL:获取特定日期的时间范围内创建的记录

时间:2012-03-05 15:00:14

标签: sql oracle date-arithmetic

我有一组上周创建的记录,而且我想要检索那些在6h45和19h15之间创建的记录。我有一个我可以使用的专栏creation_date

我怎样才能在sql中执行此操作?

3 个答案:

答案 0 :(得分:15)

在Oracle中,我们可以将日期转换为数字,并以各种方式对它们应用算术。

例如sysdate-7给我们七天前的日期。 trunc(some_date)从日期列中删除时间元素。而to_char(some_date, 'SSSSS')给我们的时间元素作为自午夜以来的秒数。因此,06:45:00是24300秒,18:15:59是69359秒(请检查这些数字,因为它们是信封背面的。)

无论如何,将这些全部放在一个像这样的查询......

select *
from your_table
where creation_date >= trunc(sysdate)-7
and to_number(to_char(creation_date, 'sssss')) between 24300 and 69359

...将生成上周创建的所有记录,并在核心时间内使用时间元素。

答案 1 :(得分:3)

此查询将返回在过去7天内创建的任何记录,其创建日期的时间部分介于上午6:45至下午7:15之间。

select * 
  from your_table
 where creation_date > sysdate - 7
   and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
   and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00' 

答案 2 :(得分:0)

根据上述标准,这将在周日至周六的06:45:00和19:15:59之间的最后一周带回记录。

如果您希望周的范围不同(例如,如果您的周是周一至周日),您可以将“ - 7”和“+ 6”调整为不同的数字。

select * 
from your_table
where creation_date >= TRUNC(SYSDATE, 'WW') - 7
and creation_date <= (TRUNC(SYSDATE, 'WW') - 7) + 6
and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00'