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算法的数据类型无效