首页 > 解决方案 > 如何在 Oracle 中查找日期和时间的分钟数?

问题描述

我的表 RUNNING_INFO 中有 4 列

TRAIN_START_DATE  VARCHAR2(8)
SCHEDULED_DATE VARCHAR2(8)
ACTUAL_DATE    VARCHAR2(8)
SCHEDULED_TIME VARCHAR2(8)
ACTUAL_TIME    VARCHAR2(8)

我必须从 Actual/Scheduled Date & time 中提取分钟,我为此编写了以下代码

SELECT TRAIN_START_DATE,SCHEDULED_DATE,ACTUAL_DATE,SCHEDULED_TIME,ACTUAL_TIME,
CEIL((TO_DATE(concat(ACTUAL_DATE, ACTUAL_TIME) , 'DD-Mon-YYYYHH24:MI:SS') - TO_DATE(TRAIN_START_DATE, 'DD-Mon-YYYY'))*1440) as ACTUAL_MINS ,
CEIL((TO_DATE(concat(SCHEDULED_DATE, SCHEDULED_TIME) , 'DD-Mon-YYYYHH24:MI:SS') - TO_DATE(TRAIN_START_DATE, 'DD-Mon-YYYY'))*1440) as SCH_MINS FROM RUNNING_INFO 

但我在 ACTUAL_MINS 和 SCH_MINS 中没有得到正确的值,例如对于以下输出行集,值在几分钟内不正确:请指导如何正确查找分钟。

在此处输入图像描述

标签: sqloracle

解决方案


两个日期之间的分钟,其中这些日期包括时间

( date1 - date2 ) * 1440

在您的情况下,日期/时间分为两列,您可以将它们合并为日期,因此类似于

to_date(to_char(sched_date,'yyyymmdd')||sched_time,'yyyymmddhh24:mi:ss')

在进行减法之前的每个日期。然后你就不需要 CEIL,因为浮点数甚至会舍入最小的小数

SQL> with t as
  2  (
  3  select
  4    '04-sep-2020' x1,
  5    '22:02:00' x2,
  6    '05-sep-2020' x3,
  7    '00:08:00'  x4
  8  from dual
  9  )
 10  SELECT
 11  CEIL((TO_DATE(concat(x1, x2) , 'DD-Mon-YYYYHH24:MI:SS') - TO_DATE(x3, 'DD-Mon-YYYY'))*1440) as ACTUAL_MINS ,
 12  CEIL((TO_DATE(concat(x3, x4) , 'DD-Mon-YYYYHH24:MI:SS') - TO_DATE(x1, 'DD-Mon-YYYY'))*1440) as SCH_MINS
 13  FROM t;

ACTUAL_MINS   SCH_MINS
----------- ----------
       -118       1449

SQL>
SQL> with t as
  2  (
  3  select
  4    '04-sep-2020' x1,
  5    '22:02:00' x2,
  6    '05-sep-2020' x3,
  7    '00:08:00'  x4
  8  from dual
  9  )
 10  SELECT
 11  (TO_DATE(concat(x1, x2) , 'DD-Mon-YYYYHH24:MI:SS') - TO_DATE(x3, 'DD-Mon-YYYY'))*1440 as ACTUAL_MINS ,
 12  (TO_DATE(concat(x3, x4) , 'DD-Mon-YYYYHH24:MI:SS') - TO_DATE(x1, 'DD-Mon-YYYY'))*1440 as SCH_MINS
 13  FROM t;

ACTUAL_MINS   SCH_MINS
----------- ----------
       -118       1448

SQL>

推荐阅读