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

时间:2018-06-20 13:25:51

标签: sql oracle time type-conversion

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

2164900006:00:49

8329300023:08:13

4 个答案:

答案 0 :(得分:2)

NUMTODSINTERVALSECOND选项一起使用:

select NUMTODSINTERVAL( 83293000 / 1000, 'SECOND' ) "Time" from dual t;

Time
-------------------
+000000000 23:08:13

答案 1 :(得分:1)

这是一种很不言自明的方式:

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小时。 这样就可以得到数字,您可以按照需要的方式对其进行编辑,以获取所需的输出格式/类型。

答案 2 :(得分:1)

如果只希望第二精度,则可以将数字除以1000得到秒,然后除以86400以得到一天的一小部分,然后将其除以任何标称日期的午夜-并将结果转换为字符串:< / p>

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的值;高于该值,您只会在第二天看到剩余的食物。

答案 3 :(得分:0)

以下查询对我有用,可以将毫秒转换为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]`