【问题标题】:How to convert milliseconds to Time(hh:mm:ss) in Oracle如何在 Oracle 中将毫秒转换为时间(hh:mm:ss)
【发布时间】:2018-11-29 15:43:25
【问题描述】:

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

2164900006:00:49

8329300023:08:13

【问题讨论】:

  • 到目前为止你尝试了什么?
  • “时间”是什么数据类型——只是那种格式的字符串?原始值是否可以超过一天(86400000),如果是,应该怎么办?
  • 当输入不是 1000 的倍数时,期望的输出是什么?即:如果输入为2500,则表示2.5秒,不能用hh:mi:ss的格式表示。 (注意mi 表示分钟;mm 如您所写,它将给您几个月,而不是几分钟。)那么期望的结果是什么?

标签: sql oracle time type-conversion


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

【讨论】:

  • 如果我想要它作为字符串? 060049 还是 230813 ?
  • to char||
  • @eyal1506 - 为什么是060049?冒号怎么了?你说你想要06:00:49格式的结果,有没有改变?
【解决方案2】:

使用NUMTODSINTERVALSECOND 选项:

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

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

【讨论】:

  • 83293000 / 1000 * INTERVAL '1' SECOND
  • @WernfriedDomscheit 如果您将其从评论移至答案,我们可以对其进行投票...
【解决方案3】:

如果你只想要秒精度,你可以将数字除以 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;比这个高,你只能在第二天看到剩下的。

【讨论】:

    【解决方案4】:

    以下查询帮助我将毫秒转换为 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]`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2021-05-09
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多