Oracle PL/SQL:TO_CHAR show格式

Oracle PL/SQL:TO_CHAR show格式,oracle,plsql,oracle-apex,Oracle,Plsql,Oracle Apex,我这里有一个代码: create or replace FUNCTION calc_length( START_TIME IN number, FINISH_TIME IN number ) RETURN NUMBER IS BEGIN RETURN ( (FINISH_TIME - START_TIME ) ; END 我想以H:mm 我尝试了TO_CHAR函数,但它接受严格的预设格式。少数示例-复制、粘贴以查看oputput: SELECT trunc(mydate

我这里有一个代码:

create or replace FUNCTION calc_length(
  START_TIME  IN number, 
  FINISH_TIME IN number
) RETURN NUMBER IS
BEGIN
  RETURN  ( (FINISH_TIME - START_TIME )   ;
END
我想以
H:mm


我尝试了
TO_CHAR
函数,但它接受严格的预设格式。

少数示例-复制、粘贴以查看oputput:

SELECT trunc(mydate / 3600) hr
     , trunc(mod(mydate, 3600) / 60) mnt
     , trunc(mod(mydate, 3600) / 60 /60) sec
 FROM 
 (
  SELECT (to_date('01/02/2013 23:00:00', 'mm/dd/yyyy  hh24:mi:ss') -
          to_date('01/01/2013 07:00:00', 'mm/dd/yyyy  hh24:mi:ss')) * 86400 mydate
    FROM dual
 )
 /

 Select hh, mi, ss From
 (
  Select EXTRACT(hour   From Cast(SYSDATE as timestamp)) hh,
         EXTRACT(minute From Cast(SYSDATE as timestamp)) mi,
         EXTRACT(second From Cast(SYSDATE as timestamp)) ss
   From dual
  )
  /

Select start_date, end_date, time_diff,
   EXTRACT(DAY FROM time_diff) days,
   EXTRACT(HOUR FROM time_diff) hours,
   EXTRACT(MINUTE FROM time_diff) minutes,
   EXTRACT(SECOND FROM time_diff) seconds
  From
  (
   Select start_date, end_date, end_date - start_date time_diff
     From
      (
       Select CAST(to_date('21/02/2012 06:10:53 am', 'dd/mm/yyyy  hh:mi:ss am') AS TIMESTAMP) end_date
            , CAST(to_date('21/02/2012 12:05:00 am', 'dd/mm/yyyy  hh:mi:ss am') AS TIMESTAMP) start_date
     From dual
      ))
     /

初始时间精度是多少?这些开始时间和结束时间是以小时、分、秒或天的形式传递到您的过程中的吗?一旦你决定了时间的精确性,算法就会变得非常简单。此外,为什么不使用
日期
时间戳
数据类型的值呢?@NicholasKrasnov让我们假设开始时间是1205,结束时间是1355,这样我会得到150的差值,代表1h50。你没有回答我关于
start\u time
end\u time
代表什么的问题。但从你的例子来看,1355是13小时55分钟,1205是12小时05分钟。问题是在这种情况下,
end\u time
start\u time
之间的差异不应该是1小时30分钟而不是1小时50分钟吗?否则。。。。奇怪的算术。@NicholasKrasnov我的同位语!数值采用
NUMBER
格式,因此
1215
代表12:15,
1355
代表13:55。问题是,如果我将
结束时间-开始时间的结果乘以
0.01
,那么我得到的时间格式是
小时.分钟
我将如何在小数点之间分割值之前的值,所以如果我得到
2.25
我将它们分割为
2
25