销售报告归档时间

时间:2015-03-25 18:59:16

标签: sql oracle date date-arithmetic

我有两个date_time字段。第一个是销售的date_time,第二个是销售报告的date_time。

为了让销售人员获得信用,销售报告必须在销售之日的午夜之前提交。

我目前正在计算差异,并且知道超过24小时的任何事情都可能超出合格时间段。此外,有时销售报告是在销售日期_时间之前提交的。

我搜索了以前的答案,但找不到类似的东西。

1 个答案:

答案 0 :(得分:0)

您需要以下内容:

select to_char(report_time, 'mm/dd/yyyy hh24:mi:ss') report_time,
    to_char(sales_time, 'mm/dd/yyyy hh24:mi:ss') sales_time,
    round((report_time - sales_time) * 24, 6) diff_in_hours,
    case when report_time < trunc(sales_time) + 2 then 'Y' else 'N' end decision
  from sales

功能trunc()可以减少sales_time的小时,分​​钟和秒数。例如,对于日期01/15/2015 11:59:00,它会返回01/15/2015 00:00:00。 接下来,我们为此结果添加2天。 Report_date必须低于此值。所以:

report_time < trunc(sales_time) + 2

使用样本数据进行测试:

with sales as (select 
    to_date('01/15/2015 11:59:00', 'mm/dd/yyyy hh24:mi:ss') report_time, 
    to_date('01/15/2015 11:45:00', 'mm/dd/yyyy hh24:mi:ss') sales_time from dual
  union all select 
    to_date('01/16/2015 23:59:00', 'mm/dd/yyyy hh24:mi:ss'), 
    to_date('01/15/2015 12:45:00', 'mm/dd/yyyy hh24:mi:ss') from dual
  union all select 
    to_date('01/17/2015 00:00:01', 'mm/dd/yyyy hh24:mi:ss'), 
    to_date('01/15/2015 23:59:00', 'mm/dd/yyyy hh24:mi:ss') from dual)
select to_char(report_time, 'mm/dd/yyyy hh24:mi:ss') report_time,
    to_char(sales_time, 'mm/dd/yyyy hh24:mi:ss') sales_time,
    round((report_time - sales_time) * 24, 6) diff_in_hours,
    case when report_time < trunc(sales_time) + 2 then 'Y' else 'N' end decision
  from sales

输出:

REPORT_TIME         SALES_TIME          DIFF_IN_HOURS DECISION
------------------- ------------------- ------------- --------
01/15/2015 11:59:00 01/15/2015 11:45:00      0,233333 Y        
01/16/2015 23:59:00 01/15/2015 12:45:00     35,233333 Y        
01/17/2015 00:00:01 01/15/2015 23:59:00     24,016944 N