我有一组上周创建的记录,而且我想要检索那些在6h45和19h15之间创建的记录。我有一个我可以使用的专栏creation_date
。
我怎样才能在sql中执行此操作?
答案 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'