将分钟转换为小时:Oracle SQL中的分钟

nukf8bse  于 2023-08-04  发布在  Oracle
关注(0)|答案(4)|浏览(233)

早上好团队,
我有一个Oracle SQL脚本,它从创建事件开始计算,并计算与systimestamp相比有多少分钟。我需要转换分钟,这是出来为120为2小时,例如,到小时:分钟版本,即。两点
我正在努力解决这个问题,想问一下是否有人可以帮助我?我目前的计算代码是:

(ROUND(((cast(systimestamp as date) - cast(n.createdttm as date)))*1440,0)) "Minutes old",

字符串
我相信这是一个简单的东西,但我所有的摆弄我不能得到它。
谢谢你的好意

oaxa6hgo

oaxa6hgo1#

您可以创建一个INTERVAL形式的分钟。

select numtodsinterval(120, 'minute') from dual

字符串
或者从分钟创建日期时间,并将其时间部分转换为小时和分钟字符串。

select to_char(trunc(sysdate) + interval '1' minute * 120, 'hh24:mi') from dual

t1rydlwq

t1rydlwq2#

看起来createdttm是一个时间戳,所以你可以减去:

systimestamp - createdtm

字符串
...得到一个像+000000000 02:00:00.00000这样的区间值。您不能直接格式化它,但是您可以提取各种元素并将它们连接在一起,或者将其视为字符串并删除所需的位。
如果你只想要时间部分,它总是少于一天,你可以这样做:

substr(systimestamp - createdtm, 12, 5)

02:00


但是如果它可以超过24小时,那么你可能也想要一天的部分,如果你知道它永远不会超过2天,你仍然可以使用substr(也许可以替换将空格改为另一个冒号):

substr(systimestamp - createdtm, 10, 7)

0 02:00


不过,这不太可能是一个安全的假设,所以你可以提取天数并将其连接起来:

extract(day from (systimestamp - createdtm)) || ':' || substr(systimestamp - createdtm, 12, 5)

0:02:00


如果天数不为零,你可以只显示天数,但这可能会让查看结果的人感到困惑;如果你真的想:

case when extract(day from (systimestamp - createdtm)) > 0
     then extract(day from (systimestamp - createdtm)) || ':'
end || substr(systimestamp - createdtm, 12, 5)

02:00


db<>fiddle与几个样本值。
需要注意的一点是,这有效地截断了时间的秒数;您最初的尝试包括round(),但这可能不是您的本意。

uelo1irk

uelo1irk3#

如果你想把分钟转换成小时和分钟。如果x是分钟数(例如350):

TO_CHAR ( FLOOR (x / 60)) || ':'
                  || TO_CHAR ( MOD (x, 60)
                         , 'FM00'
                     )

字符串
如果你想转换小时和分钟到分钟。

SELECT  (TRUNC (x) * 60) + 
    ( (MOD (x, 1)
    * 100 
    ) 
FROM    dual;


其中X是数字。如果你有一个sting,s,那么使用TO_NUMBER(s)代替x。

cig3rfwq

cig3rfwq4#

create or replace function      minutes_to_hhmm(p_minutes in number) return varchar2
as
begin
case when p_minutes is null then return null ;
     when p_minutes is not null then
return
to_char(trunc(p_minutes/60))||':'||lpad(to_char(trunc(mod(p_minutes,60))),2, '0');
end case;
end minutes_naar_hhmm;

字符串

相关问题