在Oracle中将经过的时间转换为十进制

在Oracle中将经过的时间转换为十进制,oracle,Oracle,在Oracle中执行以下计算(结束时间减去开始时间)时,结果为+00 01:30:00.000000。如何将结果转换为1.50 to_timestamp(to_char(end_time,'HH:MI AM'), 'HH:MI AM') - to_timestamp(to_char(start_time,'HH:MI AM'), 'HH:MI AM') 试着这样做: select dat,extract(hour from dat) ||'.'||trunc(100*extract(minu

在Oracle中执行以下计算(结束时间减去开始时间)时,结果为+00 01:30:00.000000。如何将结果转换为1.50

to_timestamp(to_char(end_time,'HH:MI AM'), 'HH:MI AM') - 
to_timestamp(to_char(start_time,'HH:MI AM'), 'HH:MI AM')

试着这样做:

select dat,extract(hour from dat) ||'.'||trunc(100*extract(minute from dat)/60,0) result from
(select to_timestamp('04:30 AM', 'HH:MI AM') - to_timestamp('03:10 AM', 'HH:MI AM') as dat from dual union all
select to_timestamp('02:30 AM', 'HH:MI AM') - to_timestamp('02:00 AM', 'HH:MI AM') as dat from dual)
结果:

DAT                                               RESULT                                                                          
--------------------------------------------------------------------------------
+00 01:20:00.000000                                1.33                  
+00 00:30:00.000000                                0.50 
。您可以很容易地提取各种成分,并通过一些算法获得所需的结果。在一般情况下(对于分数天的结果!):


在您的特定情况下,假设(1)“时间戳是数据类型”(2)您“忽略了日、秒和毫秒分量”(3)您想要分数小时:


另一种方法:由于您的时间只精确到分钟,您也可以只使用日期,减去日期会产生一个十进制数字,例如:

to_date(to_char(end_time,'HH24:MI'), 'HH24:MI') - 
to_date(to_char(start_time,'HH24:MI'), 'HH24:MI')
如果保证日期部分在同一日期,则可以使用更简单的表达式来获得相同的结果:

end_time - start_time

你的意思是加20分钟吗?基本上我需要将计算结果转换为十进制,这样1小时30分钟就等于1.5什么数据类型是
开始时间
结束时间
<代码>varchar2<代码>日期<代码>时间戳<代码>带有本地时区的时间戳?时间戳是数据类型。确定。那么为什么要将
时间戳
值转换为字符串,然后再转换回时间戳呢?您是否试图忽略
开始时间
结束时间
的日、秒和毫秒分量?
to_date(to_char(end_time,'HH24:MI'), 'HH24:MI') - 
to_date(to_char(start_time,'HH24:MI'), 'HH24:MI')
end_time - start_time