我想将PL / SQL毫秒转换为Time(hh:mm:ss)
21649000
至06:00:49
或
83293000
至23:08:13
答案 0 :(得分:2)
将NUMTODSINTERVAL
与SECOND
选项一起使用:
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]`