首页 > 解决方案 > SQL 日期和时间

问题描述

我需要在大学数据库中获取具有申请接受日期和时间的学生名单。报告在晚上 6 点发送给管理层,但管理层可以在晚上 7 点到晚上 8 点或晚上的任何时间运行它。申请应该比报告运行日期提前 2 天。

ORACLE:我创建了一个查询,但它会提供一天 24 小时的应用程序。这个查询的问题是当管理层在 6 PM 和 8 PM 运行查询时,并且在这段时间之间接受任何学生。结果会有所不同。

select 
    to_char(application_accepted_date, 'DD-MON-RR:HH24:MI:SS')
from 
    tbl_application_accepted_date
where 
    to_date(application_accepted_date, 'DD-MON-rr:HH24:MI:SS') = 
    to_date(trunc(sysdate-2), 'DD-MON-rr:HH24:MI:SS')

;

如果任何申请在 6 点前被接受,我需要在接下来的几天报告中列出清单。意思是,我应该有从前一天下午 6 点开始到申请日 5:59 的录取学生名单。 我在下午 6 点后收到申请,我不需要在今天的报告中,我应该在第二天的报告中得到这个。 该报告于 2018 年 10 月 4 日运行

我在下午 6 点后收到申请,我不需要在今天的报告中,我应该在第二天的报告中得到这个。该报告于 2018 年 10 月 4 日运行

标签: sqloracledateto-dateto-char

解决方案


如果它需要在下午 6 点切断,那么只需将 18/24(18 小时)添加到截断的日期。你也做了很多不必要的演员。只要application_accepted_date是日期字段,您就可以将其作为日期进行比较。

select to_char(application_accepted_date, 'DD-MON-RR:HH24:MI:SS')
from tbl_application_accepted_date
where application_accepted_date >= trunc(sysdate-3)+18/24
  and application_accepted_date <  trunc(sysdate-2)+18/24

这将为您提供从 3 天前下午 6 点开始到 2 天前下午 6 点之前的任何申请。

编辑:如果你愿意,你也可以用区间文字来做到这一点。与上述相同的查询,但您的意图更明确。

select to_char(application_accepted_date, 'DD-MON-RR:HH24:MI:SS')
    from tbl_application_accepted_date
    where application_accepted_date >= trunc(sysdate-3) + interval '18' hour
      and application_accepted_date <  trunc(sysdate-2) + interval '18' hour

推荐阅读