如何在Oracle中将毫秒转换为Time(hh:mm:ss)



我想将 PL/SQL 毫秒转换为 Time(hh:mm:ss(

2164900006:00:49

8329300023:08:13

NUMTODSINTERVALSECOND选项一起使用:

select NUMTODSINTERVAL( 83293000 / 1000, 'SECOND' ) "Time" from dual t;
Time
-------------------
+000000000 23:08:13

这是一个不言自明的方式:

select val,
floor(     val / 1000 / 60 / 60       ) as hours,
floor( mod(val / 1000 / 60      , 60) ) as minutes,
floor( mod(val / 1000           , 60) ) as seconds
from (
select 21649000 val from dual union 
select 83293000 val from dual
)
VAL      HOURS    MINUTES    SECONDS
---------- ---------- ---------- ----------
21649000          6          0         49
83293000         23          8         13

这不会处理天数,因此毫秒数必须小于 24 小时。 这给出了数字,您可以按照所需的方式对其进行编辑,以获得所需的输出格式/类型。

如果你只想要秒精度,你可以把数字除以 1000 得到秒,用 86400 得到一天的一小部分,然后将其添加到任何名义日期的午夜 - 并将结果转换为字符串:

select to_char(date '1970-01-01' + (21649000/86400000), 'HH24:MI:SS') as time
from dual;
TIME    
--------
06:00:49
select to_char(date '1970-01-01' + (83293000/86400000), 'HH24:MI:SS') as time
from dual;
TIME    
--------
23:08:13

这仅适用于小于一天的值,即您的原始数字小于 86400000;高于此值,您只能在第二天看到剩余值。

下面的查询为我工作,将毫秒转换为 HH:MM:SS

SELECT
TO_CHAR(TRUNC([ColumnName]/3600000),'FM9900') || ':' ||
TO_CHAR(TRUNC(MOD([ColumnName],3600000)/60000),'FM00') || ':' ||
TO_CHAR( trunc(MOD([ColumnName],60000)/1000),'FM00') FROM [TableName]`

最新更新