Oracle HH.MM格式的分钟数

Oracle HH.MM格式的分钟数,oracle,time,Oracle,Time,我正在使用以下查询 (24 * extract(day from (sysdate - c.LOADING_TIME) day(9) to second)) + extract(hour from (sysdate - c.LOADING_TIME) day(9) to second) + ((1/100) * extract(minute from (sysdate - c.LOADING_TIME) day(9) to second)) - required_ti

我正在使用以下查询

(24 * extract(day from (sysdate - c.LOADING_TIME) day(9) to second))
       + extract(hour from (sysdate - c.LOADING_TIME) day(9) to second)
       + ((1/100) * extract(minute from (sysdate - c.LOADING_TIME) day(9) to second)) -
required_time/60
现在我得到的数据大约是6.76。问题是我没有将所需的时间转换为HH.MM。如何做到这一点

p、 请注意,required_time表示分钟整数,我需要输出为5.45,这意味着5小时45分钟要进行提取工作,您必须将使用的字段转换为_时间戳,以便显示正确的时间戳。还有,我想你说的是MI而不是MM,因为MM的意思是月而不是分钟。像这样的-

SELECT EXTRACT(MINUTE FROM TO_TIMESTAMP('01-JAN-2005 19:15:26','DD-MON-YYYY HH24:MI:SS')) FROM dual;
如果有日期字段,则-

SELECT EXTRACT(MINUTE FROM TO_TIMESTAMP(TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS')) FROM dual;
在查询中,从sysdate开始的小时数。。。从系统日期算起的分钟数。。。可能正在返回0。但是,对于一天来说,它可以工作。

要进行提取工作,您必须将使用的字段转换为时间戳,以便显示正确的时间戳。还有,我想你说的是MI而不是MM,因为MM的意思是月而不是分钟。像这样的-

SELECT EXTRACT(MINUTE FROM TO_TIMESTAMP('01-JAN-2005 19:15:26','DD-MON-YYYY HH24:MI:SS')) FROM dual;
如果有日期字段,则-

SELECT EXTRACT(MINUTE FROM TO_TIMESTAMP(TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS')) FROM dual;

在查询中,从sysdate开始的小时数。。。从系统日期算起的分钟数。。。可能正在返回0。但是,对于一天来说,它会起作用。

您希望以小时和分钟表示差异。我会用简单的算术:

select trunc((sysdate - c.LoadingTime)*24) as hours,
       trunc(mod((sysdate - c.LoadingTime)*24*60, 60)) as minutes
from . . .
您可以将其格式化为字符串:

select to_char(trunc((sysdate - c.LoadingTime)*24), '00')||':'+
       to_char(trunc(mod((sysdate - c.LoadingTime)*24*60, 60)), '00')

您希望以小时和分钟表示差异。我会用简单的算术:

select trunc((sysdate - c.LoadingTime)*24) as hours,
       trunc(mod((sysdate - c.LoadingTime)*24*60, 60)) as minutes
from . . .
您可以将其格式化为字符串:

select to_char(trunc((sysdate - c.LoadingTime)*24), '00')||':'+
       to_char(trunc(mod((sysdate - c.LoadingTime)*24*60, 60)), '00')
因此,您有加载时间日期和所需时间整数,您试图确定加载某个SYSDATE的实际时间-加载时间和标准加载时间所需时间之间的差异

如果我没有弄错,请尝试以下方法:

WITH e AS 
  (SELECT NUMTODSINTERVAL((SYSDATE - LOADING_TIME), 'DAY') -
          NUMTODSINTERVAL(REQUIRED_TIME, 'MINUTE') AS ELAPSED 
     FROM YOUR_TABLE_HERE) 
SELECT TRIM(CASE
              WHEN EXTRACT(HOUR FROM ELAPSED) < 0 THEN '-'
              WHEN EXTRACT(MINUTE FROM ELAPSED) < 0 THEN '-'
              ELSE ' '
            END ||
            TRIM(TO_CHAR(ABS(EXTRACT(HOUR FROM ELAPSED)), '09')) || '.' || 
            TRIM(TO_CHAR(ABS(EXTRACT(MINUTE FROM ELAPSED)), '09')))
  FROM e;
NUMTODSINTERVAL是Oracle的函数,用于将标量值(如所需的_时间)转换为一个间隔,然后可以在涉及日期等的计算中使用该间隔。文件

希望这能让事情变得简单一点

分享和享受

编辑:更正了提取调用。添加了将SYSDATE-LOADING\U TIME的结果转换为间隔的转换。包含符号处理。

因此您有加载时间日期和所需时间整数,并且您正在尝试确定加载某个SYSDATE-加载时间的实际时间与所需标准加载时间之间的差异

如果我没有弄错,请尝试以下方法:

WITH e AS 
  (SELECT NUMTODSINTERVAL((SYSDATE - LOADING_TIME), 'DAY') -
          NUMTODSINTERVAL(REQUIRED_TIME, 'MINUTE') AS ELAPSED 
     FROM YOUR_TABLE_HERE) 
SELECT TRIM(CASE
              WHEN EXTRACT(HOUR FROM ELAPSED) < 0 THEN '-'
              WHEN EXTRACT(MINUTE FROM ELAPSED) < 0 THEN '-'
              ELSE ' '
            END ||
            TRIM(TO_CHAR(ABS(EXTRACT(HOUR FROM ELAPSED)), '09')) || '.' || 
            TRIM(TO_CHAR(ABS(EXTRACT(MINUTE FROM ELAPSED)), '09')))
  FROM e;
NUMTODSINTERVAL是Oracle的函数,用于将标量值(如所需的_时间)转换为一个间隔,然后可以在涉及日期等的计算中使用该间隔。文件

希望这能让事情变得简单一点

分享和享受


编辑:更正了提取调用。添加了将SYSDATE-LOADING\U TIME的结果转换为间隔的转换。包括标志处理。

c.LOADING\U TIME的数据类型是什么?你想完成什么。你解释你不想要什么,但不要真正解释你想要什么。加载时间是日期。我想要这件:-系统日期-加载时间-所需时间。我已将前两个转换为HH.MM格式,但无法满足数据类型为整数的时间要求。我认为它的HHMI不是HHMM。MM表示月份。c.U时间的数据类型是什么?你想完成什么。你解释你不想要什么,但不要真正解释你想要什么。加载时间是日期。我想要这件:-系统日期-加载时间-所需时间。我已将前两个转换为HH.MM格式,但无法满足数据类型为整数的时间要求。我认为它的HHMI不是HHMM。MM是个月。查询摘要的第一部分。。。工作正常。例如,假设它返回10.35。现在我想用所需的时间减去它,以分钟为单位。我尝试了reqd_time/60,但这给了我10.85,这不是HH.MM。您的提取日很好,但我对提取小时和提取分钟有点怀疑。您可以从sysdate-day9运行selectextracthour到dual的second;看看它返回了什么?返回一个整数小时。我猜没问题。查询摘要的第一部分。。。工作正常。例如,假设它返回10.35。现在我想用所需的时间减去它,以分钟为单位。我尝试了reqd_time/60,但这给了我10.85,这不是HH.MM。您的提取日很好,但我对提取小时和提取分钟有点怀疑。您可以从sysdate-day9运行selectextracthour到dual的second;看看它返回了什么?返回一个整数小时。我猜没问题。说ORA-30081:ELAPSED上的datetime/interval算法的数据类型无效说ORA-30081:ELAPSED上的datetime/interval算法的数据类型无效