【问题标题】:PL/SQL: TO_CHAR show formatPL/SQL: TO_CHAR 显示格式
【发布时间】:2014-04-09 14:22:41
【问题描述】:

所以我这里有这段代码:

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 函数,但它接受严格的预设格式。

【问题讨论】:

  • 初始时间精度是多少?这些 start_time 和 end_time 是以小时、分钟或秒的形式传递给您的程序,还是以天为单位?一旦你决定了时间精度,算术就变得非常简单了。此外,为什么不使用datetimestamp 数据类型的值呢?
  • @NicholasKrasnov 让我们说开始时间是 1205,结束时间是 1355,所以这会给我一个 150 的差异,代表 1h50m
  • 有趣。尽管start_timeend_time 的这些值代表什么,但您没有回答我的问题。但从您的示例来看,数字 1355 是 13 小时 55 分钟,而 1205 是 12 小时 05 分钟。问题是在这种情况下end_timestart_time 之间的区别不应该是 1 小时 30 分钟而不是 1 小时 50 分钟吗?否则......奇怪的算术。
  • @NicholasKrasnov 我的道歉!这些值采用NUMBER 格式,因此1215 代表12:15,1355 代表13:55。问题是,如果我将end-time - start_time 的结果乘以0.01,那么我得到Hours.Minutes 格式的时间我将如何在小数点之间的值之前拆分值,所以如果我得到2.25,我将它们拆分为225

标签: oracle plsql oracle-apex


【解决方案1】:

几个例子 - 复制、粘贴以查看输出:

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
      ))
     /

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 2023-03-21
    • 2017-09-24
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多